about_Foreach-Parallel
DESCRIZIONE BREVE
Descrive il costrutto di ForEach -Parallel
linguaggio nel flusso di lavoro di Windows PowerShell.
DESCRIZIONE LUNGA
Il parametro Parallel della ForEach
parola chiave esegue i comandi in un ForEach
blocco di script una volta per ogni elemento in una raccolta specificata.
Gli elementi della raccolta, ad esempio un disco in una raccolta di dischi, vengono elaborati in parallelo. I comandi nel blocco di script vengono eseguiti in sequenza su ogni elemento della raccolta.
ForEach -Parallel
è valido solo in un flusso di lavoro di Windows PowerShell.
SYNTAX
ForEach -Parallel ($<item> in $<collection>)
{
[<Activity1>]
[<Activity2>]
...
}
DESCRIZIONE DETTAGLIATA
Analogamente all'istruzione ForEach in Windows PowerShell, la variabile che contiene la raccolta $<collection>
deve essere definita prima dell'istruzione ForEach -Parallel
, ma la variabile che rappresenta l'elemento $<item>
corrente viene definita nell'istruzione ForEach -Parallel
.
Il ForEach -Parallel
costrutto è diverso dalla ForEach
parola chiave e dal parametro Parallel . La ForEach
parola chiave elabora gli elementi nella raccolta in sequenza. Il parametro Parallel esegue comandi in un blocco di script in parallelo. È possibile racchiudere un blocco di script paralleli in un ForEach -Parallel
blocco di script.
I computer di destinazione in un flusso di lavoro, ad esempio quelli specificati dal parametro comune del flusso di lavoro PSComputerName , vengono sempre elaborati in parallelo.
Non è necessario specificare la ForEach -Parallel
parola chiave per questo scopo.
ESEMPI
Il flusso di lavoro seguente contiene un'istruzione ForEach -Parallel
che elabora i dischi che ottiene l'attività Get-Disk
. I comandi nel ForEach -Parallel
blocco di script vengono eseguiti in sequenza, ma vengono eseguiti sui dischi in parallelo. I dischi potrebbero essere elaborati simultaneamente e in qualsiasi ordine.
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
}
}
In questa versione del flusso di lavoro i Get-Process
comandi e Get-Service
vengono eseguiti in parallelo. La funzione del flusso di lavoro continua con il ForEach -Parallel
ciclo in cui i comandi vengono eseguiti in sequenza, ma vengono eseguiti sui dischi in parallelo. I comandi paralleli e il ForEach -Parallel
ciclo vengono eseguiti simultaneamente.
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}
}
}
}