begin, process, end
PowerShellでは、パイプラインで受け取った値を処理する方法にbegin/process/endというものが存在します。まずは、下記スクリプトを入力してください。
PS > function f
>> {
>> begin { $local:cnt = 1 }
>> process { ("$local:cnt:$_"); $local:cnt += 1 }
>> end { $local:cnt }
>> }
>>
このスクリプトには、begin/process/endがありますが、パイプラインから値を受け取ると
begin {最初の1回だけ実行}
process {パイプラインで受け取った値ごとに実行}
end {最後に1回だけ実行}
という動作をします。
つまり、先ほど入力した関数fは、
- 最初にローカル変数
cntを1で初期化 - パイプラインから受け取った値(
$_に値が代入されている)を表示し、ローカル変数をインクリメント - 最後にローカル変数の現在値を表示
ということを行います。
先ほど、パイプライン引数の値は$input自動変数に入ることを説明しました。process節でパイプラインの値を取得する場合は$_自動変数となりますので、使用には注意してください。
実際に、この関数にパイプラインから値を渡してみましょう。
PS > "apple","banana","orange" | f 1:apple 2:banana 3:orange 4
パイプラインからの値を処理する際、前処理と後処理を行いたい場合は、ぜひ使用してみてください。
まとめ
今回は、前回に引き続きPowerShellでの関数の取り扱いを取り上げ、次の内容について解説しました。
- 関数をファイルに作成する
- 関数をプロファイルに登録する
- パイプライン引数
- begin, process, end
次回もPowerShellでの関数の取り扱いについて取り上げると共に、変数のスコープについても説明したいと思います。
