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 ファイルは以上です。
簡単な処理ならスクリプトブロックを使ったほうが楽そうです。
スポンサーリンク