Главная

Wednesday, 30 May 2018

Простой доступ по SSH и SCP в PowerShell.

Всем привет.

Занимаясь очередным полигоном как всегда понадобился доступ к хосту по SSH. На сей раз хост виндовый. PuTTY? Ну конечно, но для автоматизации процесса  хочется чего нибудь из командной строки. И, о счастье, оказывается добрые люди создали модуль Posh-SSH для простого доступа по SSH и SCP из PowerShell.

Модуль Posh-SSH позволяет:

  • устанавливать сессии SSH и SFTP по кредитам или используя OpenSSH ключ
  • подключаться через SOCKS и HTTP прокси для обоих видов SSH и SFTP сессий
  • исполнять команды по одиночке посылая их в SSH
  • загружать и скачивать файлы использую SCP и SFTP протоколы:

Set-SCPFile, Get-SCPFile, Get-SCPFolder, Set-SCPFolder, Get-SFTPFile – download a specified file from a remote SFTP session, Move-SFTPFile – moves a specified file in a remote hosts through SFTP, Remove-SFTPFile – deletes a specified file in a remote hosts through SFTP, Set-SFTPFile – uploads a specified file to a given path using SFTP.

Для SSH поддерживается аутентификация по ключу, логину и паролю, ввод с клавиатуры.
Поддерживаются разные алгоритмы шифрования, прокси. Минимальные требования - PowerShell 3.0 и .NET 4.0

Проверим!

Добавляем модуль:
>Find-Module Posh-SSH | Install-Module

Что в новом модуле есть для нас:
>Get-Command -Module Posh-SSH

Пробуем. Сначала создаем SSH сессию:
>Import-Module Posh-SSH
>$secpasswd = ConvertTo-SecureString "paССw0rd" -AsPlainText -Force
>$mycreds = New-Object System.Management.Automation.PSCredential ("User03", $secpasswd)
>New-SSHSession -ComputerName 192.168.1.10 -Credential $mycreds -Force

Sunday, 27 May 2018

Локализация интерфейса?

Всем привет.



Вот такие вот перлы можно встретить в локализованном интерфейсе Paint.NET. Теперь вы понимаете почему я настоятельно рекомендую переключать любой интерфейс на Английский язык. И сам язык тоже надо подучивать.

Успехов.

Friday, 25 May 2018

Уведомление о файлах cookie в странах ЕС.

Привет и Hello.

День настал. Google это сделал за меня.

В соответствии с законодательством Европейского Союза вы должны предоставлять посетителям из стран ЕС информацию о файлах cookie, используемых в вашем блоге. Во многих случаях законодательство также обязывает вас получать от посетителей согласие в отношении этих файлов.

Мы добавили в ваш блог уведомление о том, что в нем используются файлы cookie сервисов Blogger и Google, включая файлы cookie Google Analytics и AdSense, а также разъяснение по поводу других данных, собираемых компанией Google.

Вы несете ответственность за актуальность уведомления и его отображение в вашем блоге. Если вы установили функции сторонних разработчиков, что привело к появлению дополнительных файлов cookie, уведомление может потерять актуальность. При этом может собираться дополнительная информация о посетителях вашего блога.

Подробнее об уведомлении и нашей ответственности здесь.

Если вы создали уведомление и хотите посмотреть его, но живете за пределами ЕС, откройте свой блог и измените код страны. Например: blogspot.fr или blogspot.co.uk. При использовании персонального домена уведомление посмотреть нельзя.

У меня уведомление работает. Проверено. Вы не увидели? Пишите в комментарий.

Остался только один вопрос - ваши куки собирает Google, а нести ответственность за них буду я?:)

Measure и Сount не одно и тоже?

Всем привет.

Настиг меня такой фокус в Powershell. 

Для оценки последней правки скрипта надо быстро оценить сколько строк информации попало в вывод. Верно, это либо Meausre-Object либо Count.

Работают оба хорошо Но тут меня постигает неудача. 

На запросе Get_ADUser ...| Measure и (Get_ADUser...).Count я вдруг читаю разные цифры. И знаете в каком случае? На единице! 

Т.е. Measure всегда выдает точно 1, а Сount решил что в том же результате ничего нет. Именно ничего, потому как если результат нулевой то оба покажут 0. Если результат от 2 и выше тоже оба покажут одинаково. А вот с 1-ей как то не сложилось у Count.

Чудеса.

Thursday, 24 May 2018

VPNFilter - що треба зробити негайно?

Увага!

Звертаю вашу увагу на загрозу нової вірусної атаки. Для цього використовується шкідливе програмне забезпечення яке отримало умовну назву «VPNFilter».

«VPNFilter» - багаторівневе модульне шкідливе програмне забезпечення з універсальними можливостями, які забезпечують проведення як розвідки та і деструктивних дій.

Важливість нової загрози у тому, що компоненти шкідливого програмного забезпечення VPNFilter дозволяють красти облікові дані користувача web-вузла. VPNFilter має деструктивну здатність, яка може зробити інфікований пристрій непридатним для використання. Руйнування пристроїв таким чином може відбуватися як окремо, так і одночасно для сотень тисяч пристроїв у всьому світі. По суті це - атака на інфраструктуру на рівні користувачів. Відомі пристрої, на які впливає VPNFilter: Linksys, MikroTik, NETGEAR та TP-Link у системі малого та домашнього офісу (SOHO), а також на пристроях з підтримкою мережних пристроїв QNAP (NAS).

Що слід зробити негайно?

користувачі маршрутизаторів SOHO та/або пристроїв NAS мають скинути їх на заводські налаштування за замовчуванням (RESET) та перезавантажити їх.
якщо у вас є будь-який з мережевих пристроїв типу SOHO надзвичайно важливо, щоби ви сконтактували з web-сайтом виробника, щоб переконатися що ви маєте останню версію прошивки. Якщо цього ще не зроблено, слід оновити прошивку та застосувати випущені патчі до ваших пристроїв.
якщо в операційній системі мережевого пристрою є функція доступу до його файлової системи (TELNET, SSH), перевірити наявність директорій «/var/run/vpnfilterw», «var/run/tor», «var/run/torrc», «var/run/tord» та видалити їх вміст.

Більш докладно в повідомленні Департаменту кіберполіції Національної поліції України.

Будьте пильними.

CMTrace как простой парсер логов от MS SCCM.

Всем привет.

После приятного знакомства с MS SCCM приходится таскать с собой просмотрщик логов CMTrace. Эта утилита из пакета MS SCCM Client Tools предназначена для просмотра логов работы SCCM типов которых может быть до сотни. Оказалось что CMTrace также готов показывать и логи от других программных комплексов. Готов он, в общем то, парсить любой текстовый файл построчно. 


При этом надо учесть что не будет у вас красивого названия колонок, даже если они будут в самом файле. Также CMTrace реагирует на слова типа "fail" или "error" подсветкой красным цветом всей строки, а на слово "warning" соответственно желтым. В русском переводе реакции на слова не будет.) Но любое другое слово можете подсветить любым цветом используя встроенный фильтр. За что собственно мы его и любим. Простенько и бесплатно.

Один фанат сего попытался даже Powershell скрипт написать чтобы можно было любые данные писать в формате удобочитаемым  утилитой CMTrace. Все построено на вызове двух функций Start-Log и Write-Log. Пример их использования внизу. Меня не впечатлило. Я ожидал консольного парсера который может взять любой текстовый файл из сделать из него лог в духе MS SCCM. За основу брать можно, но допиливать надо. Но что есть то есть.

VPN и ошибки 789, 800.

Привет, привет.

Мое знакомство с pfSense началось с задачи построения VPN на тестовом облаке. pfSense - свободный специализированный дистрибутив FreeBSD с открытым исходным кодом, адаптированный для использования в качестве брандмауэра и маршрутизатора, с удобным web-интерфейсом. Платформа является гибкой и мощной, она включает значительный набор связанных функций и системных пакетов, позволяющих расширить возможности системы не внося потенциальных уязвимостей в систему и увеличения её размера.

Я не стал исключением и получил самую частую ошибку всех кто начинает строить VPN на pfSense: ошибка 789 или 800.

Ошибка стара как мир и с завидной регулярностью переходит из одной версии Windows в другую, а тянется она еще с Windows XP.


Этот баг остался и в Windows 10. Правда, 10-ка не сообщает, что это именно ошибка с кодом 789, но если заглянуть в журнал Application то с уровнем событий "Ошибка" от RasClient можно прочесть следующее:
CoID={88A3C6C6-F36D-41FC-8C9C-FEFA718D81E6}: Пользователь Eugene установил удаленное подключение MyCloud, которое завершилось сбоем. Возвращен код ошибки 789.

Как исправить?

Запустите редактор реестра и перейдите в раздел HKEY_LOCAL_MACHINE\System\ CurrentControlSet\Services\Rasman\Parameters.

Далее для параметра AllowL2TPWeakCrypto установите значение 1, а также создайте DWORD-параметр ProhibitIpSec и для него также установите значение 1.

После этого нужно перезагрузить компьютер. Данное решение подходит как для Windows 7, так и для Windows 10.


Tuesday, 22 May 2018

Active Directory - хочу все знать.

Всем привет.

Время от времени приходится искать в Active Directory пользователя по имени или другому признаку. Или когда он был последний раз в сети. Особенно это актуально для вылова дублей на одного и того же сотрудника и на тех которым не сидится за своим рабочим ПК и они норовят поработать еще и за другим. Разумеется опять же может помочь Poweshell (об этом варианте позже), но также хотелось бы узнать для начала что же есть в штатном арсенале администратора Active Directory.

Как это не грустно, но - штатная оснастка Active Directory Users and Computers (ADUC) показывает многое, но ни времени последнего входа, ни когда истекает пароль по политике (это важно для забывчивых) там нет. 

Да, мне подсказывают что можно включить консоль ADSIEdit и (или на вкладке Attribute Editor) в свойствах пользователя увидеть нужные мне атрибуты пользователя. Можно, но не наглядно, долго бегать мышкой и глазами.

Можно еще задействовать инструмент от Русиновича ADExplorer. Чем он лучше? Он лучше тем что это отдельный инструмент и имеет логичный поиск по атрибутам объекта в Active Directory. Но наглядность результатов далека от идеала. Подобно ADSIEdit.

И вот я нахожу информацию про вкладку Additional Account Info которой у меня почему то нет.

Читаю и узнаю что еще со времен домена на базе Windows Server 2003 в свойствах пользователя в консоли  Active Directory Users and Computers (ADUC) появилась вкладка Additional Account Info. Для этого нужно было скачать Windows 2003 Resource Kit и зарегистрировать в системе специальную библиотеку Acctinfo.dll. После этого при открытии окна свойств любого пользователя AD, можно увидеть новую вкладку, содержавшей различную полезную для администратора домена информацию, в частности:
  • Password Expires - когда истекает срой действия пароля
  • User Account Control/Locked - статус учетной записи (активна, отключена, заблокирована и т.д.)
  • Last logon (logoff) - время последней регистрации (выхода) пользователя  на контроллере домена
  • Информацию по счетчикам неудачных/удачных входов в систему
  • Информацию о SID, GUID и SID History.

Monday, 21 May 2018

Кому он нужен, этот GDPR?

Всем привет.

Сегодня в ИТ сообществе мало кто не говорит про GDPR и что оно нам привнесет нового. Чем чаще упоминают Общий регламент по защите данных (англ. General Data Protection Regulation, GDPR), тем больше появляется трактовок и многочисленных версий законодательства, и тем сложнее становится разобраться и эффективно применить эту информацию на практике. В двух словах GDPR строго определяет правила обхождения с персональными данными (ПД) физлица: где хранить, как долго, как защищать, кто и когда может потребовать удаления их из базы данных, и т.п.

Сложность понимания GDPR еще и в том что в Украине уже действует закон "О защите персональных данных". Правда относится он только к гражданам Украины. В принципе и GDPR должен защищать ПД только граждан ЄС. Но GDPR имеет статус экстерриториальности поэтому он будет действовать для граждан ЄС за пределами ЄС, т.е по всему миру. Как это будет на практике и все ли страны пойдут навстречу - поглядим.

Если вы полагаете что вас, как не гражданина ЄС, этот закон не касается то вы уже ошибаетесь. Во первых все онлайн-сервисы меняют свою политику конфиденциальности для вас как для своего клиента.

Вот от Google:

В этом месяце мы внесем изменения в Политику конфиденциальности, чтобы нашим пользователям было проще разобраться, какую информацию мы собираем и как она используется. Мы также усовершенствовали проверку настроек конфиденциальности и другие функции защиты данных и конфиденциальности. 

Ваши текущие настройки и принципы обработки информации останутся без изменений. В обновленном документе мы подробно рассказываем о наших принципах и возможностях для пользователей: управление данными, их изменение, экспорт и удаление. 

Эти изменения связаны с тем, что в Европейском союзе вступает в силу Генеральный регламент о защите персональных данных (GDPR). Мы вносим необходимые изменения в Политику конфиденциальности и надеемся, что они помогут пользователям Google со всего мира. 

Тоже самое я получил еще как минимум от пяти сервисов. Т.е. они применяют эти правила независимо от того чей паспорт вы имеете.

Во вторых если вы имеете деловые отношения с ПД партнера, или клиента из-за рубежа то вам следует соблюдать GDPR в полной мере.

В этом случае во главу угла станет понятие что такое ПД и какие данные под это определение попадают. Я бы даже сказал что наступает золотая эра для наших юристов и адвокатов, которые наверняка проявят себя в этом вопросе.)

Закон Украины "О защите персональных данных" гласит  что Персональные данные (или личные данные) - любая информация, относящаяся к определенному или определяемому на основании такой информации физическому лицу (субъекту персональных данных), в том числе его фамилия, имя, отчество, год, месяц, дата и место рождения, адрес, семейное, социальное, имущественное положение, образование, профессия, доходы, другая информация.

Т.е. ПД это данные по которым можно однозначно идентифицировать человека. Однозначно! Не сделать предположение что это Вася, а однозначно ответить что это Василий Пупкин, у которого номер паспорта и ИНН такой то. Юристы наверняка покажут себя на трактовке понятия "другая информация". Как то мне пытались доказать что почтовый адрес типа Вася-Козырный@ukr.net тоже есть ПД. А то что его вела на ukr.net подружка Наташка их не волновало).

Как Закон "О защите персональных данных" будет сочетаться с GDPR сказать пока сложно. Как работает первый, я пока не увидел. Все кампании, банки, магазины и т.п. берут с нас подписку что они могут обрабатывать, хранить и... даже передавать наши ПД 3-м лицам. Это все. Т.е. мы сами разрешаем делать с нашей ПД что угодно.

Надеюсь GDPR станет более эффективным.

Sunday, 20 May 2018

Получение информации из Active Directory с PowerShell, часть 2.

Всем привет.

Продолжим бороздить просторы Active Directory?

Оказалось что в модуле Active Directory PowerShell информацию можно получать не только привычным Get*. Есть такой замечательный командлет Search-ADAccount. И вот что он может.

К примеру, выведем список отключенных учетных записей во всем домене:
Search-ADAccount -UsersOnly –AccountDisabled

Ограничить область поиска определенным контейнером (OU) Active Directory можно так:
Search-ADAccount -UsersOnly –AccountDisabled –searchbase "OU=Admins,OU=Accounts,DC=forza,DC=local"

Список заблокированных пользователей в определенном OU Active Directory
Эти же данные можно представить в более удобном табличном виде с помощью команды:
Search-ADAccount -UsersOnly -AccountDisabled -searchbase "OU=Admins,OU=Accounts,DC=forza,DC=local"|ft -AutoSize

Либо, если нужно получить список заблокированных пользователей, содержащий только определённые атрибуты пользователей и представить в виде графической таблицы с возможностью сортировки, выполните:
Search-ADAccount -UsersOnly -AccountDisabled | sort LastLogonDate | Select Name,LastLogonDate,DistinguishedName | out-gridview -title "Disabled Users"

Табличное представление GridViewСписок заблокированных учетных записей пользователей:
Search-ADAccount -UsersOnly –localkedOut

Список учетных записей пользователей, неактивных в течении 60 дней:
$timespan = New-Timespan –Days 60
Search-ADAccount –UsersOnly –AccountInactive –TimeSpan $timespan

И посчитать количество таких аккаунтов:
Search-ADAccount –UsersOnly –AccountInactive –TimeSpan $timespan | Measure

Список компьютеров, с которых не регистрировалсиь в сети  в течении последних  90 дней.
Search-ADAccount -AccountInactive –ComputersOnly -TimeSpan 90

Либо с определенной даты:
Search-ADAccount -AccountInactive -ComputersOnly -DateTime ‘1/1/2018’ | Select Name,LastLogonDate | ft

Для выгрузки данных в CSV воспользуйтесь такой командой:
Search-ADAccount -AccountDisabled -UsersOnly | Export-Csv "d:\disabled_users.csv"

Успехов.

Saturday, 19 May 2018

Получение информации из Active Directory с PowerShell, часть 1.

И снова здравствуйте.

Вот так мы все обходили стороной возможности Powershell в получении информации из домена. Не было необходимости. Но работая над формированием очередного списка хостов у меня накопились свои записки PS1-вызовов. Ну хватит, пора к делу. Поехали. Как добавить модуль ActiveDirectory в свою PS вы уже знаете.

Что мы имеем в распоряжении для сбора информации смотрим так:
Get-Command -Module ActiveDirectory | where {$_.Name -like 'Get-*'}


Так добываем информацию по группам:
#GROUP ##################################################################

:Get Group with 0 members
get-ADGroup -filter "members -notlike '*' -AND GroupScope -eq 'Universal'" -SearchBase "OU=Groups, OU=Employees, DC=forza, DC=local" | Select Name, Group*
get-ADGroup -filter * | where {-Not ($_ | get-adgroupmember)} | Select Name

:Get Members of Group
Get-ADGroupMember "Domain Admins"
Get-ADGroupMember "Администраторы домена" | sort objectClass

Get-ADGroupMember "Администраторы" | sort objectClass,Enabled
Get-ADGroupMember "Группа администрирования"

:Get Users for Remoted desktop service
Get-ADGroup -filter 'Name -like "Пользователи удаленного*"'
Get-ADGroupMember "Пользователи удаленного рабочего стола" | Select name

:Ad-Remove group
Remove-ADGroup OldSkullGroup
Add-ADGroup NewSkillGroup

А так добываем информацию по пользователям:
#USER ####################################################################

Thursday, 17 May 2018

Сохраненные LDAP-запросы.

Всем привет.

Сколько у вас заблокированных аккаунтов в домене? А сколько серверов? А сколько из них выше версии 2003? Вопросы, вопросы. 

А хотите это знать это  в любой момент времени? Конечно хочу! Разумеется можно это получить с помощью Powershell.

Например так:
Get-ADComputer -Filter "OperatingSystem -like '*Server*'" -properties OperatingSystem,OperatingSystemServicePack | Select Name,Op* | format-list

Однако в консоли Active Directory Users and Computers (ADUC) есть такая полезная опция как Сохраненные запросы (Saved Queries) которые позволяют создавать простые и сложные LDAP-запросы по выборке объектов Active Directory. Эти запросы можно сохранять, редактировать и переносить между компьютерами. С помощью сохраненных запросов можно быстро и эффективно решать задачи поиска и выборки объектов в AD по различным критериям. Saved Queries, например, помогут быстро: вывести список всех отключенных учетных записей в домене, выбрать всех пользователей определенной организации с ящиками на заданном сервере Exchange и т.п.

Важное преимущество сохраненных LDAP-запросов - предоставление возможности выполнять групповые операции с объектами из разных OU (контейнеров) Active Directory, например массовая блокировка-разблокировка, перемещение, удаление учетных записей и т.п. Т.е. позволяют «избавиться» от недостатков иерархической структуры OU в Active Directory, собрав все нужные объекты в плоском табличном виде.

Из опыта надо учитывать тип вхождения значения параметра в запрос. Например сервера платформы после версии Windows 2000 слово "Server" пишут в середине. Поэтому надо выбирать условие "совпадает", но далее указывать слово со звездами по бокам, как *Server*.


Wednesday, 16 May 2018

Встроенный Диспетчер задач Chrome.

Всем привет.

Вчера наблюдал жуткие тормоза  в работе web-браузера Chrome. Несмотря на то что это была одна из Windows ХР и Chrome обновлять там уже невозможно он до сих пор работал весьма резво. Диспетчер задач при первой открытой и пустой вкладке почему то показал целых 5 процессов. И что самое неприятное один из них быстро набирал размер памяти.



Начинаем разбираться. К счастью Chrome имеет свой Диспетчер задач (Доп инструменты). Открываем и видим 4 процесса, два из них недавно установленные плагины для работы онлайн  банкинге. Теперь можем сравнить по ID процесса кто себя ведет нехорошо. Более того тут же можно выбрать "Статистика для админов" что нам откроет еще одну вкладку с подробной статистикой по распределению памяти среди процессов от Chrome.


Вернемся к Диспетчеру задач Chrome-а. Он может большее. Достаточно щелкнуть правой клавишей мыши и мы увидим сколько еще показателей можно задействовать для просмотра.


Так что было с моим Chrome? Пришлось отключить плагины банкинга. Хотя один фантомный процесс (GPU) так и остался неизученным.

Удачи.

Tuesday, 15 May 2018

Автоматический анализ Best Practices в Windows.


Всем привет.

Лучшая практика (англ. best practice) - формализация уникального успешного практического опыта. Согласно идее лучшей практики, в любой деятельности существует оптимальный способ достижения цели, и этот способ, оказавшийся эффективным в одном месте, может оказаться столь же эффективным и в другом. В литературе по менеджменту англ. термин часто переводится на русский как передовой опыт. В администрировании ИТ-сервисов такие практики существуют давно. Им можно следовать или только прислушиваться, но знать их определенно надо.

Кампания Microsoft пошла навстречу администраторам Windows и включила возможность анализа соответствия Best Practices прямо из коробки. Начиная с версии 4.0 в Powershell есть модуль BestPractices который содержит 4 командлета:  Get-BpaModel, Get-BpaResult, Invoke-BpaModel, Set-BpaResult.  Работа с ними предназначена для серверных платформ. Хотя сам модуль присутствует и в Windows 10.

Как это делается?

Вначале получаем список моделей и их ID.
Get-BpaModel | ft -Property Name,ID

Я выбираю эту:
Name: Windows Server Update Services
ID:   Microsoft/Windows/UpdateServices     
             
Далее собственно запускаем анализ выбранной модели:
Invoke-BpaModel -ModelId Microsoft/Windows/UpdateServices
Ждем...

Заносим результат анализа в переменную $Result для повторной фильтрации:
$Result = Get-BpaResult -ModelId Microsoft/Windows/UpdateServices
$Result.count

Выводим результат с флагом предупреждения:
$Result | where Severity -eq 'Warning'
ИЛИ
$Result | where Severity -eq 'Предупреждение'

Мне, например, вывело такой:
ResultNumber : 2
ResultId     : 3285811104
ModelId      : Microsoft/Windows/UpdateServices
SubModelId   : UpdateServices-DB
RuleId       : 2
ComputerName : myupdate
Context      : UpdateServices
Source       : myupdate
Severity     : Предупреждение
Category     : Производительность
Title        : База данных WSUS должна быть установлена на не системном диске
Problem      : База данных WSUS не установлена, или она установлена на системном диске.
Impact       : Установка базы данных WSUS на системном диске может привести к повреждению операционной системы и отказу любой службы, если на системном диске не останется места.
Resolution   : Если база данных WSUS (SUSDB) установлена, переместите WSUS на не системный диск.
Help         : http://go.microsoft.com/fwlink/?LinkId=230524
Excluded     : False

Как видите описана проблема и советы по ее устранению.

Последний командлет Set-BpaResult является больше творческим ибо позволяет только править результаты работы Invoke-BpaModel для дальнейшего рассмотрения.

Все просто.

Sunday, 13 May 2018

Скрипт определения версии MS Office.

Мы снова в эфире.

Борьба с MS Office-ом продолжается)). Опять мне показывают хвосты от продуктов MS Office на одном ПК. Я опять вспоминаю скрипты очистки OfficeScrub и как они отработали у меня.

За это время было предложение банально отлавливать версию  MS Office по наличию папок. Но опыт показывает что штатная деинсталляция не любит убирать их за собой.

Что еще можно придумать? Можно выловить наличие продукта и его версию по WMI-запросу:

Gwmi –query "Select * from Win32_Product WHERE Name like 'Microsoft Word%' AND Version like '16%'" | Select Version

Gwmi –query "SELECT * FROM CIM_Datafile WHERE Name = 'C:\\Program Files\\Microsoft Office\\Office16\\WINWORD.EXE'"

И тут я натыкаюсь на заметку еще одного админа с громким названием "Скрипты для полного удаления старых версий Office". Тем более что в самом конце он обещает что в состав проекта Remove-PreviousOfficeInstalls на Git входит скрипт Remove-PreviousOfficeInstalls.ps1, который должен автоматически определять установленную на компьютере версию MS Office и вызывать один из соответствующих OffScrub скриптов. С определенными модификациями его также можно использовать в сценариях автоматического удаления Office. 

Неужели это оно, то что доктор прописал? Надо проверить. Раз такое дело и OfficeScrub берется удалять ЛЮБУЮ версию Office, то наверняка у них есть функция по определению версии такого продукта. Качаем пакет, но скрипта Remove-PreviousOfficeInstalls.ps1 там не находим. Ладно, тогда открываем RemoveOffice.ps1 и продолжаем наши поиски. Вот она красавица - функция с многообещающим названием Get-OfficeVersion.


Тестирую ее сходу Get-OfficeVersion | Select Version. Результат есть! Можно использовать в своих целях. Например ее вызов с параметром -ShowAllInstalledProducts покажет вам все что есть офисного на вашем ПК.

Как ее вызвать без остальных функций? 
Например так:
powershell -ExecutionPolicy bypass -command "& { . .\script.ps1; Get-OfficeVersion | fl}"
Но предварительно в этом случае лучше тело функции Get-OfficeVersion отдельно от остального кода RemoveOffice поместить  в файл script.ps1.

На сегодня все. Удачи.

Saturday, 12 May 2018

Item-level targeting и запрос WMI.

Всем привет.

Так вот - таки да,  Item-level targeting в политиках рулит. Я вам обещал что расскажу - проще простого, все делается на раз два, правкой ключей реестра и их нацеливанием на конкретную группу хостов или объектов. Вот здесь парень все показал подробно и доходчиво. Повторять его не буду. Он точно молодец.



Я проверил эту возможность для моей GP. Редактор нацеливания предлагает  на выбор много параметров. Но нас с вами привлекает самый нижний элемент - запрос WMI. Теперь наши запросы красиво вяжутся по нужному нам "И".









Более того, WMI-запросы можно комбинировать с LDAP-запросами и MSI.
Успехов.

Thursday, 10 May 2018

Фильтрация вывода в PowerShell.

Привет.

Вы знаете чем в PowerShell фильтровать вывод Get-командлетов?

Любой запрос типа Get выдаст нам кучу информации. А наша задача выделить из него самое нужное. Варианты есть.

Sort-Object и Group-Object

Недавно я рассказывал про форматирование вывода в Out-GridView. Так вот там для фильтрации(форматирования) результата выполнения команд были затронуты функции Sort-Object и Group-Object. Вы помните что важна последовательность использования этих функций в одном вызове.

Where-Object

Результат выполнения почти любого запроса может содержать много дополнительной информации. Предположим, нам требуется вывести имена командлетов которые только получают информацию в домене. Эту задачу позволяет решить команда where-object, которую практически никогда не вызывают по полному имени, а просто Where. 
Вот так:
Get-Command -Module ActiveDirectory | where {$_.Name -like 'Get-*'}

Как свести результаты PowerShell к самому необходимому неплохо рассказано здесь.

Select-Object

Это еще не все. Начинаем комбинировать и отсекаем лишние поля знакомым нам Select по традиционному SQL:
Get-ADComputer -filter "Enabled -eq 'False'" | Select Name

Возможна комбинация фильтра с Where:
get-aduser -f * | where {$_.samaccountname -like "Eugen*"}

Тоже самое можно получить и только фильтром:
get-aduser -filter {Samaccountname -like "Eugen*"}

Monday, 7 May 2018

Conversion of ETW files.

Hi all.

Maybe you know that Window 10 has another format of tracing files. It's ETW. And Windows Update logs are now generated using ETW (Event Tracing for Windows) too.

So if you would like to watch to c:\WindowsUpdate.log file ypu can read only one hint:
Please run the Get-WindowsUpdateLog PowerShell command to convert ETW traces into a readable WindowsUpdate.log.

No problem. You can launch Powershell concole and type it for run:
Get-WindowsUpdateLog -Verbose

So, Powershell with tracerpt.exe utility will make for you huge final WindowsUpdate.log file directly to your Desktop.



Do you know where live your Powershell? No. Ok.

You can do it manually with  tracerpt.exe utility yourself.

Our example:
tracerpt.exe c:\windows\logs\WindowsUpdate\WindowsUpdate.20180505.075600.137.1.etl -o d:\1.csv -of CSV
tracerpt.exe c:\windows\logs\WindowsUpdate\WindowsUpdate.20180505.123139.142.1.etl -o d:\2.csv -of CSV

copy 1.csv+2.csv WindowsUpdate.log

Just a minute, I know plus one utility which can give us conversion of ETW files to text. If you find yourself in a situation where you need to convert some Windows Update .ETL files into human readable format and the Get-WindowsUpdateLog PowerShell cmdlet isn’t available for whatever reason, you can use TraceFmt.exe to do this for you.

However the TraceFmt utility available through both the Windows Software Development Kit (SDK) and Windows Driver Kit (WDK). It takes the details in the trace logs and outputs a human-readable text file containing the formatted trace messages. How does it work?

Our example:
tracefmt.exe -o "%UserProfile%\Desktop\WindowsUpdate.log"
%SystemRoot%\Logs\WindowsUpdate\Windowsupdate.103937.1.etl
%SystemRoot%\Logs\WindowsUpdate\Windowsupdate.103937.10.etl
-r srv*%SystemDrive%\Symbols*https://msdl.microsoft.com/download/symbols

See you later.

Saturday, 5 May 2018

WMI-фильтры в групповых политиках (GPO).

Всем привет.

Вот посоветовал вчера вам отследить версию MS Office по его папке. А дело даже не в версии, а в его наличии на том или ином ПК в сети. Ибо MS Office можно поставить как на сервер так и на рабочую станцию. Казалось бы нам в руки сам падает WMI-фильтр. Ведь так удобно его использовать для фильтрации целевой группы в GPO. 

Однако не все так просто. Вот к примеру надо отфильтровать и тип ОС и наличие в ней SQL-сервера. Делаем штатными средствами два запроса и оба помещаем в один фильтр. 


Однако практика показывает что оба запроса выполняются хоть и последовательно, но независимо от результатов друг друга. Печалька. Поэтому специалисты советуют обратиться к gpo item level targeting. Ok, разберемся.

Для справки запрос для определения ОС.

SELECT * FROM Win32_OperatingSystem WHERE Version LIKE "ВерсияОС" AND ProductType = "ТипКлиента" AND OSArchitecture = "Разрядность" где

ВерсияОС:
Windows Server 2016 и Windows 10 - 10.0%
Windows Server 2012 R2 и Windows 8.1 — 6.3%
Windows Server 2012 и Windows 8 — 6.2%
Windows Server 2008 R2 и Windows 7 — 6.1%
Windows Server 2008 и Windows Vista — 6.0%
Windows Server 2003 — 5.2%
Windows XP — 5.1%
Windows 2000 — 5.0%

ТипКлиента:
ProductType=1 - Клиент
ProductType=2 - Контроллер домена
ProductType=3 - Сервер

Разрядность:
OSArchitecture ="64-bit"
OSArchitecture ="32-bit"

Успехов.

Thursday, 3 May 2018

Удаленная инсталляция ПО - GPO или SCCM?

Приветики.

На днях сравнивал AD GPO и SCCM в вопросе распространения ПО.

Прежде чем делать выбор процесса установки ПО с помощью групповых политик (GPO), оговорим, что распространение ПО с помощью политик  не всегда является оптимальным решением и имеет ряд неприятных ограничений. 

А именно:

1.  Невозможность планирования установки ПО. При установке софта при помощи групповой политики, установить или деинсталлировать ПО можно только при ближайшей загрузке системы. Или вы сможете выполнить у  клиента  gpupdate /force. Поэтому практически невозможно, организовать массовое обновление какого-либо ПО, например, в ночное время,  когда нагрузка на сеть минимальная.  В этом случае лучше использовать SCCM. Используя окна обслуживания или настройки WOL(Wake On LAN).

2.  Поддерживаются только MSI и ZAP установщики. Формат дистрибуции приложений в групповых политиках - это лишь популярный MSI installer и менее известные пакеты ZAP. В этом случае опять предпочтительнее использование SCCM, т.к.  он поддерживает использование всех возможных установщиков. Да что там, ему можно и обыкновенный bat-файл зарядить.

3.  Фиксированный порядок установки приложений. При добавления нового приложения в объект групповой политики, оно устанавливается на ПК последним, и поменять этот порядок нельзя.

4.  Отсутствие контроля. При установке ПО через групповую политику, пакет установщика выполняется на целевом компьютере, однако какая-либо обратная связь отсутствует. Поэтому вы с уверенностью не сможете сказать установилось ли ваше ПО на конкретном компьютере или нет. В SCCM приблизительно та же история ибо в случае с bat-файлом он вам отчитается только про запуск самого файла. 

Не знаю как вам, но мне  SCCM ближе и в вопросе инсталляции ПО и в вопросе доставки обновлений. Однако он и дороже.

Успехов.

Wednesday, 2 May 2018

Без антивируса - защити себя сам!

Всем привет.

В последнее время вредный код типа ransomware и троянов стремится попасть в систему в виде скриптов (.js, .vbs, .wsf).

Само простое что вы можете сделать, если вы не пишите подобные скрипты сами или не юзаете их от других авторов, то просто заприте их выполнение

Это можно сделать через реестр:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings
"Enabled"=dword:00000000

А можно через правила встроенного фаерволла:
netsh advfirewall firewall add rule name="Block_WScript" dir=out action=block program="C:\Windows\System32\wscript.exe"
netsh advfirewall firewall add rule name="Block_CScript" dir=out action=block program="C:\Windows\System32\cscript.exe"

Также пишут гуру-защитники что сегодня авторы вирусов норовят использовать все файловые возможности Windows, т.е. кроме папки %temp% payload вируса чаще пишется в %AppData% или в %Public%. Поэтому правила ужесточаются до ограничения запуска исполняемого кода с папки C:\Users\*\*\*.exe с рекурсией.

Что именно и как закрывать я рекомендую узнать на примере отличного антивируса МсАfee.

Но даже если у вас другой антивирус, или его нет вообще, то вам все равно следует выполнить запрет на запуск EXE-файлов из C:\Users\*.

Это можно элементарно сделать групповыми политиками Windows. Не знаете как? Как сделать запрет запуска исполняемых файлов из конкретного каталога (и глубже) показано здесь.



Но смотрите не перестарайтесь. Как показала практика в %appdata%\*\ может работать много и честных программ. Тот же Chrome или другие приложения разработчики которых таким образом уходят от административных прав в ОС. Нужно будет строить исключения и разрешать их явно.

Это будет ваша первая реакция против неизвестного кода которая закроет до 90% возможной вирусной атаки в будущем. Обычно все заключается в распаковке (декодировке) загрузчика и последующей загрузки с Интернета основного файла (payload), записи его на диск и последующего запуска. Поэтому ваша задача проста - перекрыть доставку основной части зловреда через скрипты, макросы, DDE и т.п.

Успехов всем нам.

Tuesday, 1 May 2018

Управление настройками сети с помощью PowerShell.

Всем привет.

Как я писал ранее в управлении настройками сети PowerShell весьма удобен. Почему? Потому что PowerShell довольно мощный инструмент автоматизации и для современных сценариев управления сетями он просто незаменим. 

В этом нам помогут функции из группы Net*:

Get-Command Get-Net*
У меня на версии PS 5.1 выдало список из 89 функций.

По каждой функции можно получить подробную справку:
Get-Help Get-NetIPAddress

Также нелишним будет ознакомиться с примерами использования:
Get-Help Get-NetIPAddress -Examples

Ежели справки нет, то освежите справку под Админом:
Update-Help

В первую очередь вам помогут при работе с ТСР/ІР сетями:
Get-NetIPConfiguration
Get-NetIPAddress
Get-NetAdapter
Get-NetAdapterBinding
Get-NetAdapterHardwareInfo
Get-NetRoute
Get-NetTCPConnection

Функции для клиента DNS:
Get-Command Get-DNS*
У меня оказалось доступно 38 функций.

Для работы с DNS-кешем используем:
-просмотр кеша, если у вас что-то дописано в файле hosts, то это будет видно по записям (RecordType=AAAA):
Get-DnsClientCache | Sort-Object Type -Descending
-очистка:
Clear-DnsClientCache
-перечень интерфейсов:
Get-DnsClientServerAddress

Еще несколько полезных функций:
Test-Connection это знакомый всем ping, полезные флаги Count и BufferSize.
Но Test-NetConnection круче обычного ping-a, он покажет доступность хоста, с флагом TraceRoute результаты трассировки, а с флагом Port доступ к порту.

Resolve-DnsName это старый знакомый nslookup

Restart-NetAdapter перезапускает сетевой адаптер.

Настроить сетевое подключение с помощью PowerShell просто:
New-NetIPAddress -InterfaceIndex 12 -IPAddress %ip% -PrefixLength %mask% -DefaultGateway %gate%
и
Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddress (“%ip%”,”%ip%”)

Что подставить вместо %ip%, %mask% и %gate% думаю вам очевидно.

Или вам нужно вернуть настройки на DHCP:
Set-NetIPInterface -Dhcp Enabled

Вот так. Успехов.