Powershellのコマンドレットだとパイプライン入力と-InputObject引数に対応した物がよくある。
同様のものを関数で作ってみる。
まず、パイプライン入力の時にParamでパラメータを受け取るためには、[Parameter(ValueFromPipeline=$True)]属性を指定してやれば良さそうだ。
また、入力が配列の場合、パイプライン入力はProcessブロックで個々の処理が可能だが、パラメータ入力の場合は自分でループしてあげる必要がありそうだ。
というわけでサンプルとしてつくってみたのが以下だ。
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 | function ftest{ #[CmdletBinding()] param( [Parameter(ValueFromPipeline=$True)] $arg1 ) process{ function proc($arg1) { Write-Host "arg1 = $arg1" } if($arg1.count){ $arg1 | %{proc $_} }else{ proc $arg1 } } } "■ Param Input" ftest ("argstring1","argstring2") "■ PipeLine Input" ("argstring1","argstring2") | ftest |
なんとなく結果は良さそうだ。(これが汎用的かどうかはちょっと自信が無い)
■ Param Input |
--- 2014/8/1 -----
たまたま昔のこのブログを見る機会があったのだが、これって特に呼ばれるパターンを判定して処理をしなくても良さそう・・・。
バージョンによる違いなのか、当時なにか勘違いをしていたのか・・・。
以下にサンプルの雛形があるので参考に。
0 件のコメント:
コメントを投稿