ScriptBlockを実行する
「{」と「}」で囲んだScriptBlockは変数に代入できます。
また、Invokeメソッドで実行も可能です。
ScriptBlockを実行する(引数なし)
MSH C:\> $a = {get-date} MSH C:\> $a.Invoke() 2005年9月27日 0:28:28
- ScriptBlockを代入した「$a」の型は「System.Management.Automation.ScriptBlock」です。
基本構文(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が変数展開される・・・って当たり前か。(^^;