about_Foreach-Parallel
KORT BESKRIVNING
Beskriver språkkonstruktionen ForEach -Parallel
i Windows PowerShell-arbetsflödet.
LÅNG BESKRIVNING
Parametern Parallell för nyckelordet ForEach
kör kommandona i ett skriptblock en ForEach
gång för varje objekt i en angiven samling.
Objekten i samlingen, till exempel en disk i en samling diskar, bearbetas parallellt. Kommandona i skriptblocket körs sekventiellt på varje objekt i samlingen.
ForEach -Parallel
är endast giltigt i ett Windows PowerShell-arbetsflöde.
SYNTAX
ForEach -Parallel ($<item> in $<collection>)
{
[<Activity1>]
[<Activity2>]
...
}
DETALJERAD BESKRIVNING
Precis som ForEach-instruktionen i Windows PowerShell måste variabeln som innehåller samlingen $<collection>
definieras före -instruktionen ForEach -Parallel
, men variabeln som representerar det aktuella objektet $<item>
definieras i -instruktionen ForEach -Parallel
.
Konstruktionen ForEach -Parallel
skiljer sig från nyckelordet ForEach
och parametern Parallel . Nyckelordet ForEach
bearbetar objekten i samlingen i följd. Parametern Parallel kör kommandon i ett skriptblock parallellt. Du kan omsluta ett parallellskriptblock i ett ForEach -Parallel
skriptblock.
Måldatorerna i ett arbetsflöde, till exempel de som anges av den vanliga parametern för PSComputerName-arbetsflödet , bearbetas alltid parallellt.
Du behöver inte ange nyckelordet för det här ändamålet ForEach -Parallel
.
EXEMPEL
Följande arbetsflöde innehåller en ForEach -Parallel
instruktion som bearbetar diskarna som Get-Disk
aktiviteten får. Kommandona i skriptblocket ForEach -Parallel
körs sekventiellt, men de körs parallellt på diskarna. Diskarna kan bearbetas samtidigt och i valfri ordning.
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
}
}
I den här versionen av arbetsflödet Get-Process
körs kommandona och Get-Service
parallellt. Arbetsflödesfunktionen fortsätter till loopen ForEach -Parallel
där kommandona körs sekventiellt, men de körs parallellt på diskarna. De parallella kommandona och loopen ForEach -Parallel
körs samtidigt.
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}
}
}
}