Использование в PowerShell Where, Where-Object, ?

Результат выполнения любого командлета — это объект. А зачастую не один а объект, а массив объектов. Для фильтрации только определенных объектов в Powershell используется Where. На самом деле Where — это алиас для командлета Where-Object. Еще один алиас этого командлета — знак вопроса. Про использование командлета Where-Object и пойдет в данной статье.

Фильтрация без Where-Object

Во-первых, большинство командлетов, которые выводят массив объектов имеют параметры. Эти параметры позволяют производить фильтрацию. Например:

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

Во-вторых, в некоторых командлетах есть параметр Filter. Он позволяет производить очень сложную фильтрацию.

Тут недостаток один — не у всех командлетов такой параметр есть. Синтаксис таких параметров очень схож с использованием Where, поэтому про синтаксис чуть позже.

В-третьих, фильтрация в графическом интерфейсе. В PowerShell 3.0 появился командлет Out-GridView, который позволяет выводить всю информацию об объектах в окном режиме. Удобно для этого использовать конвейер.

Далее открывается окно, в котором можно производить полнотекстовую фильтрацию или фильтрацию по определенным полям.

out-gridview

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

Просмотр параметров доступных для фильтрации

Не все объекты выводятся на экран вместе со всеми своими свойствами. То какие поля попадут на экран, а какие нет контролируются в настройках PowerShell. Для просмотра всех свойств, методов и других составляющих объекта используется командлет Get-Member. Для его использования опять таки удобно воспользоваться конвейером.

В общем-то, фильтрацию можно производить по любому свойству перечисленному в Get-Member.

Есть правда один нюанс, что не всегда командлеты, возвращают объекты с полным перечнем свойств. Т.е. возвращают урезанный объект. И Get-Member в таком случае показывает не все свойства объекта. Тут нужно заглядывать в справку по командлету и искать там параметры, которые позволяют изменить список объектов. Пример это Get-ADUser

Заметьте на сколько во втором случае больше свойств.

Операции сравнения

Прежде всего нужно разобраться с операциями сравнения:

 

  • -lt – Меньше, чем
  • -le – Меньше или равно
  • -gt – Больше, чем
  • -ge – Больше или равно
  • -eq – Равно
  • -ne – Не равно
  • -like – оператор подобия
  • -notlike – оператор не-подобия

Если подставить к первым 7 в начале символ ‘c’ получатся операции сравнения, чувствительные к регистру. Например, -eq не чувствителен к регистру, а -ceq уже чувствителен к регистру.

А еще нужно разобраться с логическими операциями.

  • -and – Оба условия должны быть истины, чтобы выражение было истинно
  • -or – Одно или оба условия должны быть истины, чтобы выражение было истинно
  • -xor – Одно условие должно быть истинно, а второе должно иметь значение «ложь», чтобы выражение было истинно
  • -not – Указанные условия должны иметь значение «ложь», чтобы выражение было истинно
  • ! – Указанное условие должно иметь значение «ложь», чтобы выражение было истинно

Рассмотрим на примерах

Базовая фильтрация PowerShell Where

Синтаксис командлета Where-Object и его алиасов Where и ? имеет две формы записи. Первая проста в использовании, но имеет несколько ограничений. Начнем с описания именно его.

Командлет принимает список объектов через параметр InputObject. Однако явно его использовать удобно разве что когда у вас список объектов сохранен в переменную. Да и в этом случае его не используют, а используют возможность параметра InputObject принимать значения через конвейер или вертикальную черту.

При использовании базовой фильтрации первым параметром Where-Object указываем то свойство, которое мы желаем отфильтровать, далее указываем оператор сравнения и в последнюю очередь значение с которым сравниваем.

И так по шагам использование базовой функциональности Where-Object

  1. Командлет, который возвращает список объектов
  2. Вертикальная черта
  3. Where-Object или любой из алиасов Where или ?
  4. Свойство фильтруемого объекта
  5. Оператор сравнения
  6. Значение с которым сравниваем

Еще несколько примеров.

В данном способе не получится использовать несколько условий или сравнить несколько полей. Нельзя использовать «подсвойства», т.е. если свойство это объект, у вас не получится сразу обратиться к данным вложенным свойствам.

FilterScript в Where-Object

Второй вариант использования Where — это использования параметра FilterScript. Данный параметр является позиционным и его указание не обязательно.

При использовании данного способа после Where в фигурных скобках указывается условие, которое обращается к свойствам объекта через переменную $_.

Переменная $_ или ее аналог $PSItem содержит текущий объект просматриваемый в конвейере. Обращение к свойствам текущего объекта осущесвляется через точку.

И так по шагам использование расширенной функциональности Where-Object

  1. Командлет, который возвращает список объектов
  2. Вертикальная черта
  3. Where-Object или любой из алиасов Where или ?
  4. Открывающаяся фигурная скобка
  5. Выражение сравнения, которое может содержать множество опереаторов сравнения и логических операций
  6. Закрывающаяся фигурная скобка

Еще несколько примеров.

Далее с отфильтрованными объектами вы можете производить множество операций. Изменение, импорт, сортировка, подстчет итогов и т.п.

Еще почитать

Регулярные выражения

О логических операциях

Об операторах сравнения

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *