概要
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}
}
}
}
参照
PowerShell