qshinoの日記

Powershell関係と徒然なこと

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