PowerShellでは、スクリプトブロックにProcessキーワードが付いている場合と付いていない場合で、動作に違いがあります。特に、ProcessキーワードはForEach-Objectコマンドレットや他のパイプライン処理において重要な役割を果たします。
通常のスクリプトブロックは、単にコードのまとまりを表し、特定のキーワードを使用しません。
例:
$scriptblock = {
param ($item)
"Processing item: $item"
}
# 実行
& $scriptblock "TestItem"
Processキーワードが付いているスクリプトブロックは、パイプライン処理で各入力オブジェクトに対して繰り返し実行されるように設計されています。
例:
$scriptblock = {
process {
param ($item)
"Processing item: $item"
}
}
# パイプラインで使用
1..5 | ForEach-Object -Process $scriptblock
| 特性 | 通常のスクリプトブロック | Process付きのスクリプトブロック |
|---|---|---|
| 使用場面 | 一般的なコードのまとまりとして使用 | パイプライン処理の各アイテムに対して実行 |
| 定義方法 | param を使用してパラメータを定義 |
param と process ブロックを使用 |
| 実行方法 | 直接実行または関数のように実行 | パイプライン処理内で自動的に繰り返し実行 |
| パラメータ処理 | 任意の場所でパラメータを定義 | process ブロック内でパラメータを定義 |
| 実行コンテキスト | 通常のスクリプト実行コンテキスト | パイプライン処理の各アイテムに対するコンテキスト |
通常のスクリプトブロック:
$scriptblock = {
param ($item)
"Processing item: $item"
}
# スクリプトブロックの直接実行
& $scriptblock "SingleItem"
出力:
Processing item: SingleItem
Process付きのスクリプトブロック:
$scriptblock = {
process {
param ($item)
"Processing item: $item"
}
}
# パイプライン処理での使用
1..5 | ForEach-Object -Process $scriptblock