about_Foreach-Parallel

DESCRIPCIÓN BREVE

Describe la construcción de lenguaje en el ForEach -Parallel flujo de trabajo de Windows PowerShell.

DESCRIPCIÓN LARGA

El parámetro Parallel de la ForEach palabra clave ejecuta los comandos en un ForEach bloque de script una vez para cada elemento de una colección especificada.

Los elementos de la colección, como un disco de una colección de discos, se procesan en paralelo. Los comandos del bloque de script se ejecutan secuencialmente en cada elemento de la colección.

ForEach -Parallel solo es válido en un flujo de trabajo de Windows PowerShell.

SINTAXIS

ForEach -Parallel ($<item> in $<collection>)
{
    [<Activity1>]
    [<Activity2>]
    ...
}

DESCRIPCIÓN DETALLADA

Al igual que la instrucción ForEach en Windows PowerShell, la variable que contiene la colección $<collection> debe definirse antes de la ForEach -Parallel instrucción , pero la variable que representa el elemento $<item> actual se define en la ForEach -Parallel instrucción .

La ForEach -Parallel construcción es diferente de la ForEach palabra clave y del parámetro Parallel . La ForEach palabra clave procesa los elementos de la colección en secuencia. El parámetro Parallel ejecuta comandos en un bloque de script en paralelo. Puede incluir un bloque de script paralelo en un ForEach -Parallel bloque de scripts.

Los equipos de destino de un flujo de trabajo, como los especificados por el parámetro común de flujo de trabajo PSComputerName , siempre se procesan en paralelo. No es necesario especificar la ForEach -Parallel palabra clave para este propósito.

EJEMPLOS

El flujo de trabajo siguiente contiene una ForEach -Parallel instrucción que procesa los discos que obtiene la Get-Disk actividad. Los comandos del ForEach -Parallel bloque de script se ejecutan secuencialmente, pero se ejecutan en los discos en paralelo. Los discos se pueden procesar simultáneamente y en cualquier orden.

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

En esta versión del flujo de trabajo, los Get-Process comandos y Get-Service se ejecutan en paralelo. La función de flujo de trabajo continúa hasta el ForEach -Parallel bucle donde se ejecutan los comandos secuencialmente, pero se ejecutan en los discos en paralelo. Los comandos paralelos y el ForEach -Parallel bucle se ejecutan simultáneamente.

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

Consulte también