해당 세션에서 실행되는 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인 작업이 완료될 때까지 기다립니다.
참고 항목