about_Foreach parallell
KORT BESKRIVNING
Beskriver språkkonstruktionen ForEach -Parallel i Windows PowerShell Workflow.
LÅNG BESKRIVNING
Parametern Parallel 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 -instruktionenForEach -Parallel, men variabeln som representerar det aktuella objektet $<item> definieras i -instruktionenForEach -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 parallellt skriptblock i ett ForEach -Parallel skriptblock.
Måldatorerna i ett arbetsflöde, till exempel de som anges av den gemensamma 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 på diskarna parallellt. 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}
}
}
}