filterとfunction
powershell のfilterとfunction
Functionは良くある関数として、filterって何?
簡単に言うと、FunctionのProcessのみの簡易版関数。
Processって何?
Powershellに於けるFunctionの構造を再度確認すると、下記の通り。但し、Begin/Process/Endの表記が無ければ、End{}として扱われる。
Function 関数名 {
Param(...)
Begin {...}
Process{...}
End{...}
}
* パラメータをParam文で記述した場合。
Begin{}は最初に一回、Process{}は、パイプからパラメータを受け取る毎に、End{}は最後に一回実行される。但し、Process実行中に例外(前段、後段、コマンドレット自信)が発生すると、End{}は実行されない。
さて、本題のfilterは、Begin/Process/End を記述しなければ、Processとして扱われる簡易型関数となる。また、パラメータを指定しなければ、$_ がパイプからの入力になる。
Functionで同じ物が書けるので、記述が簡単になる事が利点。
なお、ls Function: で表示される様な気がするので、内部ではFunctionとして扱われているのかも。
filter例)
単純に出力するだけ。
filter doout {
write-output $_
}
同等function
Function doout_func {
param([Mandatory=$true, ValueFromPipeline])
$in
Process {
write-output $in
}
}
filterの方が記述量が少なく、関数が短ければ、お得かも。
下記参照
http://tech.blog.aerie.jp/entry/2014/05/22/133615