about_Foreach平行
簡短描述
描述 ForEach -Parallel
Windows PowerShell 工作流程中的語言建構。
LONG DESCRIPTION
關鍵詞的 ForEach
Parallel 參數會針對指定集合中的每個項目執行腳本區塊中的ForEach
命令一次。
集合中的專案,例如磁碟集合中的磁碟,會平行處理。 腳本區塊中的命令會循序在集合中的每個項目上執行。
ForEach -Parallel
只有在 Windows PowerShell 工作流程中才有效。
語法
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}
}
}
}