다음을 통해 공유


about_Foreach 병렬

간단한 설명

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

자세한 설명

키워드의 ForEach Parallel 매개 변수는 지정된 컬렉션의 각 항목에 ForEach 대해 스크립트 블록에서 명령을 한 번 실행합니다.

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

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

통사론

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

자세한 설명

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

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

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

예제

다음 워크플로에는 활동이 가져오는 디스크를 Get-Disk 처리하는 문이 포함되어 ForEach -Parallel 있습니다. 스크립트 블록의 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}
       }
   }
}

참고 항목