ТОП 10:

Фильтрация объектов в конвейере



В PowerShell поддерживается возможность фильтрации объектов в конвейере, т.е. удаление из конвейера объектов, не удовлетворяющих определенному условию. Данную функциональность обеспечивает командлет Where-Object, позволяющий проверить каждый объект, находящийся в конвейере, и передать его дальше по конвейеру, только если объект удовлетворяет условиям проверки.

Например, для вывода информации о "зависших" процессах (объекты, возвращаемые командлетом Get-Process, у которых свойство Responding равно False) можно использовать следующий конвейер:

Get-Process | Where-Object {-not $_.Responding}

Другой пример – оставим в конвейере только те процессы, у которых значение идентификатора (свойство Id) больше 1000:

Get-Process | Where-Object {$_.Id -gt 1000}

В блоках сценариев командлета Where-Object для обращения к текущему объекту конвейера и извлечения нужных свойств этого объекта используется специальная переменная $_, которая создается оболочкой PowerShell автоматически. Данная переменная используется и в других командлетах, производящих обработку элементов конвейера.

Условие проверки в Where-Object задается в виде блока сценария – одной или нескольких команд PowerShell, заключенных в фигурные скобки {}. Результатом выполнения данного блока сценария должно быть значение логического типа: True (истина) или False (ложь). Как можно понять из примеров, в блоке сценария используются специальные операторы сравнения.

Замечание.В PowerShell для операторов сравнения не используются обычные символы > или <, так как в командной строке они обычно означают перенаправление ввода/вывода.

Основные операторы сравнения приведены в табл. 1.

Таблица 1. Операторы сравнения в PowerShell

Оператор Значение Пример (возвращается значение True)
-eq равно 10 -eq 10
-ne не равно 9 -ne 10
-lt меньше 3 -lt 4
-le меньше или равно 3 –le 4
-gt больше 4 -gt 3
-ge больше или равно 4 -ge 3
-like сравнение на совпадение с учетом подстановочного знака в тексте "file.doc" –like "f*.doc"
-notlike сравнение на несовпадение с учетом подстановочного знака в тексте "file.doc" –notlike "f*.rtf"
-contains содержит 1,2,3 –contains 1
-notcontains не содержит 1,2,3 –notcontains 4

Операторы сравнения можно соединять друг с другом с помощью логических операторов (см. табл. 2). Таблица 2. Логические операторы в PowerShell

Оператор Значение Пример (возвращается значение True)
-and логическое И (10 -eq 10) –and (1 –eq 1)
-or логическое ИЛИ (9 -ne 10) –or (3 –eq 4)
-not логическое НЕ -not (3 –gt 4)
! логическое НЕ !(3 -gt 4)

Сортировка объектов

Сортировка элементов конвейера – еще одна операция, которая часто применяется при конвейерной обработке объектов. Данную операцию осуществляет командлет Sort-Object: ему передаются имена свойств, по которым нужно произвести сортировку, а он возвращает данные, упорядоченные по значениям этих свойств.

Например, для вывода списка запущенных в системе процессов, упорядоченного по затраченному процессорному времени (свойство cpu), можно воспользоваться следующим конвейером: PS C:\> Get-Process | Sort-Object cpu

Для сортировки в обратном порядке используется параметр Descending:

PS C:\> Get-Process | Sort-Object cpu -Descending

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

Get-Process | Where-Object {$_.Id -gt 1000} | Sort-Object cpu –Descending 1.9.5. Использование переменных

В переменных хранятся все возможные значения, даже если они являются объектами. Имена переменных в PowerShell всегда должны начинаться с символа «$». Можно сохранить список процессов в переменной, это позволит в любое время получать доступ к списку процессов. Присвоить значение переменной легко:

$a = get-process | sort-object CPU

Вывести содержимое переменной можно, просто напечатав в командной строке $a.

 







Последнее изменение этой страницы: 2017-02-06; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.232.188.251 (0.003 с.)