다음을 통해 공유


about_Foreach 병렬

간단한 설명

Windows PowerShell 워크플로의 foreach -Parallel 언어 구문에 대해 설명합니다.

자세한 설명

키워드의 Parallelforeach지정된 컬렉션의 각 항목에 foreach 대해 스크립트 블록에서 명령을 한 번 실행합니다.

디스크 컬렉션의 디스크와 같은 컬렉션의 항목은 병렬로 처리됩니다. 스크립트 블록의 명령은 컬렉션의 각 항목에서 순차적으로 실행됩니다.

foreach -Parallel 는 Windows PowerShell 워크플로에서만 유효합니다.

통사론

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

자세한 설명

Windows PowerShell의 foreach 문과 마찬가지로 컬렉션 $<collection> 포함하는 변수는 foreach -Parallel 문 앞에 정의되어야 하지만 현재 항목 $<item> 나타내는 변수는 foreach -Parallel 문에 정의되어 있습니다.

foreach -Parallel 구문은 키워드 및 Parallelforeach다릅니다. 키워드는 foreach 컬렉션의 항목을 순서대로 처리합니다. 병렬 매개 변수는 스크립트 블록에서 명령을 병렬로 실행합니다. 스크립트 블록에 병렬 스크립트 블록을 묶을 foreach -Parallel 수 있습니다.

PSComputerName 워크플로 공통 매개 변수에 지정된 컴퓨터와 같은 워크플로의 대상 컴퓨터는 항상 병렬로 처리됩니다. 이 목적을 위해 키워드를 foreach -Parallel 지정할 필요가 없습니다.

예제

다음 워크플로에는 활동이 가져오는 디스크를 foreach -Parallel 처리하는 문이 포함되어 Get-Disk 있습니다. 스크립트 블록의 foreach -Parallel 명령은 순차적으로 실행되지만 디스크에서 병렬로 실행됩니다. 디스크는 순서에 따라 동시에 처리될 수 있습니다.

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

이 워크플로 Get-Process 버전에서는 명령과 Get-Service 명령이 병렬로 실행됩니다. 워크플로 함수는 명령이 순차적으로 실행되는 루프를 계속 foreach -Parallel 하지만 디스크에서 병렬로 실행됩니다. 병렬 명령과 루프는 foreach -Parallel 동시에 실행됩니다.

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

참고 항목