Windows Powershell では、ForEach-Object コマンドレット (foreach エイリアス) の処理とファンクションの処理には類似したところがあります。それはパイプライン処理をする際に次の 3 つのブロックが存在することです。
- 最初に一度だけ実行されるブロック
- 引数の数だけ実行されるブロック
- 最後に一度だけ実行されるブロック
ForEach-Object (foreach エイリアス)
このサンプルでは、作成した配列をパイプランを通じて ForEach-Object コマンドレットに送ります。最初の値が送られてきたタイミングで空の配列を作ります。次に一つ一つの値が送られてきたタイミングでその値を配列に格納していきます。最後に配列の内容を出力します。
("A", "B", "C") | ForEach-Object { $a = @() } { $a += $_ } { $a }
ファンクション
このサンプルも上記の ForEach-Object コマンドレットの処理と全く同じです。
1. 次のファンクションを作成します。
function test { begin { $a = @()} process {$a += $_} end {$a} }
2. ファンクションをコールします。
("A", "B", "C") | test