2017年4月20日

【PowerShell】スクリプトブロック


PowerShellには{}で囲って一つのユニットとして使えるようにしたスクリプトブロックというものがあります。


例1

たとえばこのようなスクリプトブロックを変数$sに代入したとします。
PS C:\work\image1> $s = { $a = 20 * 30; $a }

これを次のように実行します。
PS C:\work\image1> $s
 $a = 20 * 30; $a
PS C:\work\image1> &$s
600
ただ$sと実行した場合には、スクリプトブロックの中身が表示されただけでしたが、&$sと実行した場合はスクリプトブロック内の処理が実行されました。
スクリプトブロックを関数のように実行したい場合は、呼び出し演算子&を付けて実行します。

また、この処理は次のように実行しても同じです。
PS C:\work\image1> &{ $a = 20 * 30; $a }
600


例2

以前、関数の例として、次のような処理を記述しましたが、
function Get-FileName {
    $input.Name
    Write-Host "ファイルは以上です。"
}

実行結果
PS C:\work\image1> Get-ChildItem | Get-FileName
aaaa.jpg
bbbb.jpg
cccc.jpg
dddd.jpg
eeee.jpg
ffff.jpg
gggg.jpg
ファイルは以上です。

これを、スクリプトブロックで記述すると次のようになります。
PS C:\work\image1> Get-ChildItem | &{$input.Name; Write-Host "ファイルは以上です。"}
aaaa.jpg
bbbb.jpg
cccc.jpg
dddd.jpg
eeee.jpg
ffff.jpg
gggg.jpg
ファイルは以上です。

簡単な処理ならスクリプトブロックを使ったほうが楽そうです。



スポンサーリンク