해당 세션에서 실행되는 Windows PowerShell 백그라운드 작업 중 하나나 전부가 완료될 때까지 명령 프롬프트를 표시하지 않습니다.

구문

Wait-Job [[-InstanceId] <Guid[]>] [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [-Job] <Job[]> [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [[-Name] <string[]>] [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [-Id] <Int32[]> [-Any] [-Timeout <int>] [<CommonParameters>]

Wait-Job [-State {<NotStarted> | <Running> | <Completed> | <Failed> | <Stopped> | <Blocked>}] [-Any] [-Timeout <int>] [<CommonParameters>]

설명

Wait-Job cmdlet은 명령 프롬프트를 표시하기 전에 Windows PowerShell 백그라운드 작업이 완료될 때까지 기다립니다. 백그라운드 작업 중 하나가 완료되거나 모든 백그라운드 작업이 완료될 때까지 기다릴 수 있으며 작업의 최대 대기 시간을 설정할 수 있습니다.

Wait-Job을 사용하여 Start-Job을 통해서나 Invoke-Command의 AsJob 매개 변수를 통해 시작된 백그라운드 작업을 가져올 수 있습니다.

작업의 명령이 완료되면 Wait-Job은 명령 프롬프트를 표시하고 다른 명령으로 파이프할 수 있도록 작업 개체를 반환합니다.

매개 변수

-Any

작업이 완료될 때마다 작업 개체를 반환하고 명령 프롬프트를 표시합니다. 기본적으로 Wait-Job은 지정된 모든 작업이 완료되기까지 기다렸다가 프롬프트를 표시합니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-Id <Int32[]>

지정된 ID를 가진 작업이 완료될 때까지 기다립니다.

ID는 현재 세션 내에서 작업을 고유하게 식별하는 정수입니다. 이 ID는 InstanceId보다 기억하거나 입력하기 쉽지만 현재 세션 내부에서만 고유합니다. 쉼표로 구분하여 하나 이상의 ID를 입력할 수 있습니다. 작업 ID를 찾으려면 매개 변수 없이 "Get-Job"을 입력합니다.

필수 여부

true

위치

1

기본값

파이프라인 입력 적용 여부

true (ByPropertyName)

와일드카드 문자 적용 여부

false

-InstanceId <Guid[]>

지정된 인스턴스 ID를 가진 작업이 완료될 때까지 기다립니다. 기본값은 모든 작업입니다.

인스턴스 ID는 컴퓨터의 작업을 고유하게 식별하는 GUID입니다. 작업의 인스턴스 ID를 찾으려면 Get-Job을 사용합니다.

필수 여부

false

위치

1

기본값

파이프라인 입력 적용 여부

true (ByPropertyName)

와일드카드 문자 적용 여부

false

-Job <Job[]>

지정된 작업이 완료될 때까지 기다립니다. 작업 개체가 포함된 변수나 작업 개체를 가져오는 명령을 입력하십시오. 또한 파이프라인 연산자를 사용하여 작업 개체를 Wait-Job cmdlet으로 보낼 수 있습니다. 기본적으로 Wait-Job은 현재 세션에서 만들어진 모든 작업이 완료될 때까지 기다립니다.

필수 여부

true

위치

1

기본값

파이프라인 입력 적용 여부

true (ByValue, ByPropertyName)

와일드카드 문자 적용 여부

false

-Name <string[]>

지정된 이름의 작업이 완료될 때까지 기다립니다.

필수 여부

false

위치

1

기본값

파이프라인 입력 적용 여부

true (ByPropertyName)

와일드카드 문자 적용 여부

false

-State <JobState>

지정된 상태의 작업이 완료될 때까지 기다립니다. 유효한 값은 NotStarted, Running, Completed, Stopped, Failed 및 Blocked입니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

true (ByPropertyName)

와일드카드 문자 적용 여부

false

-Timeout <int>

각 백그라운드 작업에 대한 최대 대기 시간을 초 단위로 결정합니다. 기본값인 -1의 경우 작업이 얼마나 오래 실행되는지에 관계없이 작업이 완료될 때까지 대기합니다. 타이밍은 Start-Job 명령을 전송할 때가 아니라 Wait-Job 명령을 전송할 때 시작됩니다.

이 시간이 초과되면 작업이 여전히 실행 중인 경우에도 대기가 종료되고 명령 프롬프트가 반환됩니다. 오류 메시지가 표시되지 않습니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

<CommonParameters>

이 cmdlet은 -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, -OutVariable 등의 일반 매개 변수를 지원합니다. 자세한 내용은 about_Commonparameters.

입력 및 출력

입력 유형은 cmdlet으로 파이프할 수 있는 개체의 유형입니다. 반환 유형은 cmdlet에서 반환되는 개체의 유형입니다.

입력

System.Management.Automation.RemotingJob

작업 개체를 Wait-Job으로 파이프할 수 있습니다.

출력

System.Management.Automation.RemotingJob

Wait-Job은 완료된 작업을 나타내는 작업 개체를 반환합니다. Timeout 매개 변수의 값이 초과되어 대기가 종료되는 경우 Wait-Job은 개체를 반환하지 않습니다.

예 1

C:\PS>get-job | wait-job

설명
-----------
이 명령은 해당 세션에서 실행되는 모든 백그라운드 작업이 완료될 때까지 기다립니다.






예 2

C:\PS>$s = new-pssession server01, server02, server03

C:\PS> invoke-command -session $s -scriptblock {start-job -name Date1 -scriptblock {get-date}}

C:\PS> $done = invoke-command -session $s -command {wait-job -name Date1}

C:\PS> $done.count
3

설명
-----------
이 예에서는 Start-Job cmdlet을 사용하여 원격 컴퓨터에서 시작된 작업에 대해 Wait-Job cmdlet을 사용하는 방법을 보여 줍니다. Start-Job 및 Wait-Job 명령이 Invoke-Command cmdlet을 사용하여 원격 컴퓨터로 전송됩니다.

이 예에서는 Wait-Job을 사용하여 세 컴퓨터에서 백그라운드 작업으로 실행되는 Get-Date 명령이 완료되었는지 여부를 확인합니다. 

첫 번째 명령은 세 원격 컴퓨터에서 각각 Windows PowerShell 세션(PSSession)을 만든 다음 $s 변수에 저장합니다. 

두 번째 명령은 Invoke-Command cmdlet을 사용하여 $s의 세 세션에서 각각 Start-Job 명령을 실행합니다. 모든 작업의 이름은 Date1로 지정됩니다.

세 번째 명령은 Invoke-Command cmdlet을 사용하여 Wait-Job 명령을 실행합니다. 이 명령은 각 컴퓨터에서 Date1 작업이 완료될 때까지 기다린 다음 작업 개체로 이루어진 결과 컬렉션(배열)을 $done 변수에 저장합니다. 

네 번째 명령은 $done 변수에 있는 작업 개체 배열의 Count 속성을 사용하여 완료된 작업 수를 확인합니다.






예 3

C:\PS>$s = new-pssession (get-content machines.txt)  

C:\PS> $c = 'get-eventlog -log system | where {$_.EntryType -eq "error" -and $_.Source -eq "LSASRV"} | out-file errors.txt'

C:\PS> invoke-command -session $s -scriptblock {param($c)start-job -scriptblock {$c}} -ArgumentList $c

C:\PS> invoke-command -session $s -scriptblock {wait-job -any}

설명
-----------
이 예에서는 Wait-Job의 Any 매개 변수를 사용하여 현재 세션에서 실행되는 많은 백그라운드 작업 중 첫 번째 작업이 완료되었는지 확인합니다. 또한 Wait-Job cmdlet을 사용하여 원격 작업이 완료될 때까지 기다리는 방법을 보여 줍니다. 

첫 번째 명령은 Machines.txt 파일에 나열된 각 컴퓨터에 PSSession을 만든 다음 $s 변수에 저장합니다. 이 명령은 Get-Content cmdlet을 사용하여 파일의 내용을 가져옵니다. Get-Content 명령은 New-PSSession 명령 전에 실행되기 위해 괄호로 묶입니다.

두 번째 명령은 Get-EventLog 명령 문자열(따옴표로 묶임)을 $c 변수에 저장합니다.

세 번째 명령은 Invoke-Command cmdlet을 사용하여 $s의 각 세션에서 Start-Job 명령을 실행합니다. Start-Job 명령은 $c의 명령을 실행하는 백그라운드 작업을 시작합니다. 

$c 변수가 로컬 컴퓨터에 있기 때문에 이 명령은 "param" 키워드를 사용하여 명령에서 로컬 변수를 선언하고 ArgumentList 매개 변수를 사용하여 해당 변수의 값을 제공합니다.

네 번째 명령은 Invoke-Command cmdlet을 사용하여 세션에서 Wait-Job 명령을 실행합니다. 또한 Wait-Job cmdlet을 사용하여 원격 컴퓨터의 첫 번째 작업이 완료될 때까지 기다립니다.






예 4

C:\PS>$s = new-pssession Server01, Server02, Server03 

C:\PS> $jobs = invoke-command -session $s -scriptblock {start-job -script {get-date}}

C:\PS> $done = invoke-command -session $s -scriptblock {wait-job -timeout 30}

설명
-----------
이 예에서는 Wait-Job의 Timeout 매개 변수를 사용하여 원격 컴퓨터에서 실행되는 작업의 최대 대기 시간을 설정하는 방법을 보여 줍니다. 

첫 번째 명령은 세 원격 컴퓨터(Server01, Server02 및 Server03)에서 각각 PSSession을 만든 다음 $s 변수에 저장합니다. 

두 번째 명령은 Invoke-Command cmdlet을 사용하여 $s의 각 PSSession에서 Start-Job 명령을 실행합니다. 그런 다음 결과 작업 개체를 $jobs 변수에 저장합니다.

세 번째 명령은 Invoke-Command cmdlet을 사용하여 $s의 각 PSSession에서 Wait-Job 명령을 실행합니다. Wait-Job 명령은 모든 명령이 30초 내에 완료되는지 여부를 결정합니다. 이 명령은 값이 30(초)인 Timeout 매개 변수를 사용하여 최대 대기 시간을 설정하고 명령의 결과를 $done 변수에 저장합니다. 

이 경우 30초 후에 Server02 컴퓨터의 명령만 완료됩니다. Wait-Job은 대기를 종료하고 명령 프롬프트를 표시한 다음 완료된 작업을 나타내는 개체를 반환합니다. 

$done 변수에는 Server02에서 실행된 작업을 나타내는 작업 개체가 포함됩니다.






예 5

C:\PS>wait-job -id 1,2,5 -any

설명
-----------
이 명령은 작업의 ID로 세 작업을 식별하고 그 중 하나가 완료될 때까지 기다립니다. 첫 번째 작업이 완료될 때 명령 프롬프트가 반환됩니다.






예 6

C:\PS>wait-job -name DailyLog -timeout 120

설명
-----------
이 명령은 DailyLog 작업이 완료될 때까지 120초(2분) 동안 기다립니다. 작업이 다음 2분 안에 완료되지 않으면 명령 프롬프트가 반환되고 해당 작업이 백그라운드에서 계속 실행됩니다.






예 7

C:\PS>wait-job -name Job3

설명
-----------
이 Wait-Job 명령은 작업 이름을 사용하여 기다릴 작업을 식별합니다.






예 8

C:\PS>C:\PS> $j = start-job -script {get-childitem *.ps1| where {$_lastwritetime -gt ((get-date) - (new-timespan -days 7))}}

C:\PS> $j | wait-job

설명
-----------
이 예에서는 Start-Job cmdlet을 사용하여 로컬 컴퓨터에서 시작된 작업에 대해 Wait-Job cmdlet을 사용하는 방법을 보여 줍니다.

이들 명령은 지난 주에 추가되었거나 업데이트된 Windows PowerShell 스크립트 파일을 가져오는 작업을 시작합니다.

첫 번째 명령은 Start-Job cmdlet을 사용하여 로컬 컴퓨터에서 백그라운드 작업을 시작합니다. 이 작업은 지난 주에 추가되었거나 업데이트된, 파일 이름 확장명이 ".ps1"인 파일을 모두 가져오는 Get-ChildItem 명령을 실행합니다.

세 번째 명령은 Wait-Job cmdlet을 사용하여 작업이 완료될 때까지 기다립니다. 작업이 완료되면 이 명령은 작업에 대한 정보가 포함된 작업 개체를 표시합니다.






예 9

C:\PS>$s = new-pssession Server01, Server02, Server03

C:\PS> $j = invoke-command -session $s -scriptblock {get-process} -asjob

C:\PS> $j | wait-job

설명
-----------
이 예에서는 Invoke-Command cmdlet의 AsJob 매개 변수를 사용하여 원격 컴퓨터에서 시작된 작업에 대해 Wait-Job cmdlet을 사용하는 방법을 보여 줍니다. AsJob을 사용하면 작업이 원격 컴퓨터에서 실행되는 경우에도 작업이 로컬 컴퓨터에 만들어지고 결과가 로컬 컴퓨터에 자동으로 반환됩니다.

이 예에서는 Wait-Job을 사용하여 세 원격 컴퓨터의 세션에서 실행되는 Get-Process 명령이 완료되었는지 여부를 확인합니다. 

첫 번째 명령은 세 컴퓨터에 PSSession을 만든 다음 $s 변수에 저장합니다. 

두 번째 명령은 Invoke-Command cmdlet을 사용하여 $s의 세 PSSession에서 각각 Get-Process 명령을 실행합니다. 이 명령은 AsJob 매개 변수를 사용하여 명령을 백그라운드 작업으로 비동기 실행합니다. 이 명령은 Start-Job을 사용하여 시작된 작업과 같은 작업 개체를 반환하며, 이 작업 개체는 $j 변수에 저장됩니다.

세 번째 명령은 파이프라인 연산자(|)를 사용하여 $j의 작업 개체를 Wait-Job cmdlet으로 보냅니다. 작업이 로컬 컴퓨터에 있기 때문에 Invoke-Command 명령은 이 경우에 필요하지 않습니다.






예 10

C:\PS>get-job

Id   Name     State      HasMoreData     Location             Command
--   ----     -----      -----------     --------             -------
1    Job1     Completed  True            localhost,server01.. get-service
4    Job4     Completed  True            localhost            dir | where

C:\PS> wait-job -id 1

설명
-----------
이 명령은 ID 값이 1인 작업이 완료될 때까지 기다립니다.






참고 항목




목차