概要

PowerShellでは、スクリプトブロックにProcessキーワードが付いている場合と付いていない場合で、動作に違いがあります。特に、ProcessキーワードはForEach-Objectコマンドレットや他のパイプライン処理において重要な役割を果たします。

基本的なスクリプトブロック

通常のスクリプトブロックは、単にコードのまとまりを表し、特定のキーワードを使用しません。

:

$scriptblock = {
    param ($item)
    "Processing item: $item"
}

# 実行
& $scriptblock "TestItem"

Process付きのスクリプトブロック

Processキーワードが付いているスクリプトブロックは、パイプライン処理で各入力オブジェクトに対して繰り返し実行されるように設計されています。

:

$scriptblock = {
    process {
        param ($item)
        "Processing item: $item"
    }
}

# パイプラインで使用
1..5 | ForEach-Object -Process $scriptblock

比較

特性 通常のスクリプトブロック Process付きのスクリプトブロック
使用場面 一般的なコードのまとまりとして使用 パイプライン処理の各アイテムに対して実行
定義方法 param を使用してパラメータを定義 paramprocess ブロックを使用
実行方法 直接実行または関数のように実行 パイプライン処理内で自動的に繰り返し実行
パラメータ処理 任意の場所でパラメータを定義 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