Вы можете написать фильтр, который является частным случаем функции, например:
filter SquareIt([int]$num) { $_ * $_ }
или вы можете создать аналогичную функцию следующим образом:
function SquareIt([int]$num) {
Begin {
# Executes once before first item in pipeline is processed
}
Process {
# Executes once for each pipeline object
$_ * $_
}
End {
# Executes once after last pipeline object is processed
}
}
Вышеуказанное работает как определение интерактивной функции или если сценарий может быть добавлен в ваш глобальный сеанс (или другой сценарий). Однако ваш пример показал, что вы хотели сценарий, так что здесь он находится в сценарии, который можно использовать напрямую (не нужно расставлять точки):
--- Contents of test.ps1 ---
param([int]$num)
Begin {
# Executes once before first item in pipeline is processed
}
Process {
# Executes once for each pipeline object
$_ * $_
}
End {
# Executes once after last pipeline object is processed
}
В PowerShell V2 это немного меняется с помощью «расширенных функций», которые включают функции с теми же функциями привязки параметров, что и скомпилированные командлеты. См. сообщение в блоге для примера различий. Также обратите внимание, что в этом случае расширенных функций вы не используете $ _ для доступа к объекту конвейера. С помощью расширенных функций объекты конвейера связываются с параметром так же, как и с командлетом.