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での関数の取り扱いについて取り上げると共に、変数のスコープについても説明したいと思います。
参考資料
この記事は参考になりましたか?
既に会員の方はを行ってください。
- Windows PowerShell 入門連載記事一覧
- この記事の著者
-
HIRO(ヒロ)
HIRO's.NETのHIROです。とある半導体工場のSEです。VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。最近はBlog でPowerShellについて書いています。2008/07/07にPowerShell from Japan!!というサイトを立ち上げまし...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
