次の方法で共有


about_Foreach-Parallel

概要

Windows PowerShell ワークフローの foreach -Parallel 言語コンストラクトについて説明します。

詳細説明

キーワードの foreach パラメーターは、指定したコレクション内の各項目について、foreach スクリプト ブロック内のコマンドを 1 回実行します。

コレクション内の項目 (ディスクのコレクション内のディスクなど) は、並列で処理されます。 スクリプト ブロック内のコマンドは、コレクション内の各項目で順番に実行されます。

foreach -Parallel は、Windows PowerShell ワークフローでのみ有効です。

SYNTAX

foreach -Parallel ($<item> in $<collection>) {
    [<Activity1>]
    [<Activity2>]
    ...
}

詳細説明

Windows PowerShell の foreach ステートメントと同様に、コレクション $<collection> を含む変数は、foreach -Parallel ステートメントの前に定義する必要がありますが、現在の項目 $<item> を表す変数は、foreach -Parallel ステートメントで定義されます。

foreach -Parallelコンストラクトは、foreach キーワードおよび Parallel パラメーターとは異なります。 foreach キーワードは、コレクション内の項目を順番に処理します。 Parallel パラメーターは、スクリプト ブロック内のコマンドを並列で実行します。 並列スクリプト ブロックは、 foreach -Parallel スクリプト ブロックで囲むことができます。

ワークフロー内のターゲット コンピューター ( PSComputerName ワークフロー共通パラメーターで指定されたコンピューターなど) は、常に並列で処理されます。 この目的のために、 foreach -Parallel キーワードを指定する必要はありません。

次のワークフローには、foreach -Parallel アクティビティが取得するディスクを処理するGet-Disk ステートメントが含まれています。 foreach -Parallel スクリプト ブロック内のコマンドは順番に実行されますが、これらはディスク上で並列に実行されます。 ディスクは、同時に、任意の順序で処理される場合があります。

workflow Test-Workflow {
    $Disks = Get-Disk

    # The disks are processed in parallel.
    foreach -Parallel ($Disk in $Disks)
    {
        # The commands run sequentially on each disk.
        $DiskPath = $Disk.Path
        $Disk | Initialize-Disk
        Set-Disk -Path $DiskPath
    }
}

このバージョンのワークフローでは、 Get-Process コマンドと Get-Service コマンドが並列で実行されます。 ワークフロー関数は foreach -Parallel ループに進み、コマンドは順番に実行されますが、ディスク上で並列に実行されます。 並列コマンドと foreach -Parallel ループは同時に実行されます。

workflow Test-Workflow {
    #Run commands in parallel.
    parallel
    {
        Get-Process
        Get-Service
    }

   $Disks = Get-Disk

   # The disks are processed in parallel.
   foreach -Parallel ($Disk in $Disks)
   {
       # The commands run in parallel on each disk.
       parallel
       {
           Initialize-Disk
           inlinescript {.\Get-DiskInventory}
       }
   }
}

参照