Condividi tramite


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}
       }
   }
}

Vedi anche