Привет.
Вы знаете чем в 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*"}
Ну а как правильно? - спросите вы. С технической точки зрения оба способа работают, но: такой подход может привести к излишней трате полосы пропускания и ресурсов сервера. И вот почему. Команда get-aduser с фильтром посылает команду контроллеру домена (DC), и DC возвращает лишь небольшое подмножество AD. Когда же результат get-aduser -f * подается на вход where-object, у DC запрашиваются все учетные записи пользователей на ваш ПК, после чего уже ваш ПК отфильтровывает их, оставляя только нужные данные. Таким образом, where-object – отличный инструмент, однако следует избегать его применения когда у исходной команды get-whatever уже есть встроенный фильтр.
Тут у вас вопрос - как узнать если у очередного командлета этот самый Filter?
Допустим мы открыли новый для нас мифический командлет Get-WhatEver. Прощупаем его на фильтр.
Первый способ через справку:
Get-Help Get-WhatEver
Второй способ через дополнение используя PowerTab. Мега-удобная вещь.
И третий способ через щелкание Tab-ом.
Т.е. пишем Get-WhatEver -f... и с помощью Tab-а проверяем подскажет нам консоль опцию Filter или нет.
Еще фишка, в некоторых случаях форматирование вывода не достанет нужное свойство если мы его не укажем явно в конвейере:
get-ADUser -Filter {EmailAddress -notlike "*forza.com.ua"} -Properties EmailAddress | ft Name,EmailAddress
Успехов.
No comments:
Post a Comment
А что вы думаете по этому поводу?