ScriptBlockを実行する

「{」と「}」で囲んだScriptBlockは変数に代入できます。
また、Invokeメソッドで実行も可能です。

ScriptBlockを実行する(引数なし)

MSH C:\> $a = {get-date}
MSH C:\> $a.Invoke()

2005年9月27日 0:28:28


基本構文(12) - PowerShell Memoで書いた「&(アンバサンド)」でも似たようなことができますね。

MSH C:\> $a = "get-date"
MSH C:\> &$a

2005年9月27日 0:29:28

ScriptBlockを実行する(引数あり)

引数を取るスクリプトもScriptBlockにできます。

MSH C:\> $b = {write-host $args}
MSH C:\> $b.invoke(1, 2, 3, 4)
1 2 3 4
MSH C:\> $b = {write-host $args[0]}
MSH C:\> $b.invoke("TEST")
TEST
  • $argsで全ての引数を配列として受け取れます。
  • $args[0]などで、個別に引数を受け取ることもできます。


「&(アンバサンド)」では引数は受け取れないようです。

MSH C:\> $b = "write-host $args[0]"
MSH C:\> &$b("TEST")
'write-host [0]' is not recognized as a Cmdlet,
 function, operable program, or script file.
At line:1 char:2
+ &$ <<<< b("TEST")
  • $argsが変数展開される・・・って当たり前か。(^^;