ScriptBlockを実行する(2)

ScriptBlockを実行する - PowerShell Memoで、「&(アンバサンド)」では引数は受け取れないようです。
と書きましたが、それは正しくはありませんでした。


文字列形式のスクリプトに対して、「&」で引数は取れませんが、
ScriptBlockに対しては、「&」でも引数を受け取れます。

「&」でScriptBlockを実行する(引数あり)

MSH C:\> $b = {write-host $args}
MSH C:\> &$b(1, 2, 3, 4)
1 2 3 4

PARAMで引数を受け取る

以下の書き方でもScriptBlockで引数を受け取ることができます。functionと同じですね。

MSH C:\> $x = {PARAM ([String]$Name, [int]$Id) "Name = $Name : Id = $Id"}
MSH C:\> &$x -Name "newpops" -Id 100
Name = newpops : Id = 100

【追記】

oka326さんから頂いたコメントによると、
「&」は外部プログラムやCmdlet呼び出しと同じ形式で引数を渡せばOKのようです。

なるほど。

MSH C:\> $a = { "Hello" + $Args[0] }
MSH C:\> &$a World
HelloWorld