Функции внутри конвейера команд в Windows PowerShell

Продолжаем рассматривать особенности применения функций и конвейеров в Windows PowerShell.

Конвейеры команд — несомненное достоинство PowerShell. Функции могут располагаться внутри конвейеров. В этом случае функция будет принимать входящий поток объектов через специальную переменную $Input.

Для лучшего понимания приведем пример.

Function Summa {
$n=0
ForEach ($i in $Input) { $n+=$i }
$n
}

Функции внутри конвейера команд в Windows PowerShell

В данном случае мы создали функцию, которая примется суммировать поступившие к ней по конвейеру элементы. Нам достаточно лишь передать функции массив чисел.

Функции внутри конвейера команд в Windows PowerShell

Кроме цикла ForEach можно использовать также метод MoveNext(), а к текущему элементу входного потока обращаться при помощи свойства Current. В таком случае функция примет вид:

Function SummaNew {
$n=0
While ($Input.MoveNext()) {
$n+=$Input.Current
}
$n
}

Функции внутри конвейера команд в Windows PowerShell

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

Функции внутри конвейера команд в Windows PowerShell

Как видим, внедрить функцию в конвейер просто. Однако есть момент, который необходимо учитывать.

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

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

Filter имя_фильтра { параметры } { блок_кода }

Фильтры отличаются от функций тем, что в них вместо $Input используется специальная переменная $_, которая соответствует текущему элементу, проходящему через фильтр.

Напишем простой фильтр, который будет состоять всего из одной строчки, и проверим его работу.

Filter Primer {$_+10}

Функции внутри конвейера команд в Windows PowerShell

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

2 thoughts on “Функции внутри конвейера команд в Windows PowerShell”

  1. Евгений. Запили форум. А мы на нём тоже сидеть буим. И тя вопросами грузить, и дажо помогать решать чьи-то траблы пытатьсо. ))

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

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