PowerShell Memo

このサイトはPowerShell(MSH/Monad)奮闘記です

管理人「newpops吉岡洋」が
「PowerShell(旧名:MSH/Monad)」の研究結果を日々綴っていきます。

【お知らせ】
この日記からPowerShellのTipsを抽出し「PowerShell FAQ」として整理しました。


2005-09-29

[]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
Connection: close