概要
poweshellでscriptをfunctionに引数として渡すやりかた
実際のコーディング例
timem.ps1
set-alias -name time measure-command
function timem($script,$num=0){
if($num -eq 0){
(time { invoke-command $script }).milliseconds
}else{
1..$num|% {(time {invoke-command $script }).milliseconds}|measure -sum -max -min -ave
}
}
プログラムの説明
これは、\$profileに格納して. $profileで有効にして
timem {ls|select name}
や
timem {ls|select name} 20
として使えば、最初の例ではミリセカンドでの応答を実測し、
2番目の例の20等の回数を指定すれば最大値、最小値、平均値を
計算してくれる。というものです。
注目点
functionで \$scriptという変数を指定していますが、これは{}がある場合はその部分が引数として
渡されます。最初は文字として渡そうかと思いましたが、その場合は|のパイプが別の意味を持って
しまうので、難しいでした。どうも、
\$a={ls|select name}とかして、$aを見てみるとscript blockという変数になっています。
{}でくくるというのは、文法的にもスクリプトとして優先されるようですねえ。