Powershell: конвейер командлетов

В операционных Unix системах в консоли уже давно реализована концепция последовательного запуска команд с передачей результата выполния команды в качестве исходных данных для следующей команды и т.д. Те же принципы работы использовались, да и сейчас применяются в MS-DOS и Windows. Такая совместная работа команд, очень напоминающая конвейер в первую очередь связана с тем, что возможности отдельной команды ограничены и не всегда соответствуют критериям пользователя. То есть, при помощи одной команды можно выполнить лишь самые простые действия, заложенные непосредственно в функционал данной команды. Поэтому, чтобы запустить более сложную обработку, часто нужно использовать несколько команд, последовательно преобразующих данные для получения приемлемого результата. Часто данные от одной команды к другой передаются в виде текста. Текст может быть большим, что как правило, делает работу с ним более трудоемкой.

В Powershell также есть возможность создавать свои собственные конвейеры и данные, передающиеся по такому конвейеру, это прежде всего объекты, в которых содержатся определенные свойства и методы, с которыми в свою очередь можно работать проще и удобнее чем просто с текстом.

Например, вот так мы можем просмотреть все запущенные службы:

Get-Service | Where-Object {$_.status -eq ‘running’}

Данная строка - это без сомнения конвейер, в котором командлет Get-Process отвечает за получение всех служб, запущеных на компьютере и создание объекта, а командлет Where-Object работает уже с объектом и выбирает службы используя уже одно из свойств объекта. Давайте сформулируем некоторые правила, по которым командлеты объединяются в конвейер. Командлеты объединяются в конвейер при помощи оператора конвейера ( | ). Выражение в скобках ( {} ) уточняет параметры, в соответствии с которыми из объекта будут выбраны данные лишь о некоторых службах. Встроенная переменная ( $_ ) обозначает текущий объект, именно так к нему можно обратиться. Status - обозначает, что значимым параметром является параметр status и он должен быть running, то есть, выбираем все запущенные службы. Кроме того, при создании конвейера часто используется обратная кавычка (`), которая предупреждает о том, что конвейер еще не закончился и будет продолжен на следующей строке. Прекратить выполнение можно при помощи точки с запятой(;).

Get-Service `
| Where-Object {$_.status -eq ‘running’};

Также можно почитать:



Оставить комментарий: