Wait-Job
세션에서 실행 중인 PowerShell 작업 중 하나 또는 전부가 종료 상태가 될 때까지 기다립니다.
구문
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Id] <Int32[]>
[<CommonParameters>]
Wait-Job
[-Job] <Job[]>
[-Any]
[-Timeout <Int32>]
[-Force]
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Name] <String[]>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-InstanceId] <Guid[]>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-State] <JobState>
[<CommonParameters>]
Wait-Job
[-Any]
[-Timeout <Int32>]
[-Force]
[-Filter] <Hashtable>
[<CommonParameters>]
Description
Wait-Job
cmdlet은 실행을 계속하기 전에 작업이 종료 상태가 될 때까지 기다립니다.
종료 상태는 다음과 같습니다.
- 완료
- 실패
- 중지
- 일시 중단
- 연결이 끊어진
지정된 작업 또는 모든 작업이 종료 상태가 될 때까지 기다릴 수 있습니다.
Timeout 매개 변수를 사용하여 작업에 대한 최대 대기 시간을 설정하거나 Force 매개 변수를 사용하여 Suspended
또는 Disconnected
상태에서 작업을 대기할 수도 있습니다.
작업의 명령이 완료되면 Wait-Job
작업 개체를 반환하고 실행을 계속합니다.
Wait-Job
cmdlet을 사용하여 Start-Job
cmdlet 또는 cmdlet의 Invoke-Command
매개 변수를 사용하여 작업이 시작될 때까지 기다릴 수 있습니다. 작업에 대한 자세한 내용은 about_Jobs참조하세요.
Windows PowerShell 3.0부터 Wait-Job
cmdlet은 워크플로 작업 및 예약된 작업의 인스턴스와 같은 사용자 지정 작업 유형도 기다립니다.
Wait-Job
가 특정 형식의 작업을 대기할 수 있도록 하려면, 사용자 지정 작업 유형을 지원하는 모듈을 세션으로 가져와야 합니다. 이를 위해, Get-Job
cmdlet을 사용하거나 모듈 내의 cmdlet을 사용하거나 가져와서 Import-Module
cmdlet을 실행하기 전에 수행해야 합니다. 특정 사용자 지정 작업 유형에 대한 자세한 내용은 사용자 지정 작업 유형 기능의 설명서를 참조하세요.
예제
예제 1: 모든 작업이 완료되기를 기다리기
Get-Job | Wait-Job
이 명령은 세션에서 실행 중인 모든 작업이 완료되기를 기다립니다.
예제 2: Start-Job 사용하여 원격 컴퓨터에서 작업이 시작될 때까지 기다립니다.
$s = New-PSSession Server01, Server02, Server03
Invoke-Command -Session $s -ScriptBlock {Start-Job -Name Date1 -ScriptBlock {Get-Date}}
$done = Invoke-Command -Session $s -Command {Wait-Job -Name Date1}
$done.Count
3
이 예제에서는 Wait-Job
cmdlet을 사용하여 원격 컴퓨터에서 시작된 작업과 함께 Start-Job
cmdlet을 사용하는 방법을 보여줍니다.
Start-Job
명령과 Wait-Job
명령은 모두 Invoke-Command
cmdlet을 사용하여 원격 컴퓨터에 제출됩니다.
이 예제에서는 Wait-Job
사용하여 세 개의 다른 컴퓨터에서 작업으로 실행되는 Get-Date
명령이 완료되었는지 여부를 확인합니다.
첫 번째 명령은 세 개의 원격 컴퓨터 각각에 Windows PowerShell 세션(PSSession)을 만들고 $s
변수에 저장합니다.
두 번째 명령은 Invoke-Command
사용하여 Start-Job
세 세션 각각에서 $s
실행합니다.
모든 작업의 이름은 Date1입니다.
세 번째 명령은 Invoke-Command
사용하여 Wait-Job
실행합니다. 이 명령은 각 컴퓨터의 Date1
작업이 완료되기를 기다립니다.
변수에 작업 개체의 결과 컬렉션($done
)을 저장합니다.
네 번째 명령은 변수에 있는 작업 개체 배열의 $done
속성을 사용하여 완료된 작업 수를 결정합니다.
예제 3: 첫 번째 작업이 완료되는 시기 결정
$s = New-PSSession -ComputerName (Get-Content -Path .\Machines.txt)
$c = 'Get-EventLog -LogName System | Where-Object {$PSItem.EntryType -eq "error" --and $PSItem.Source -eq "LSASRV"} | Out-File -FilePath Errors.txt'
Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$Using:c}
Invoke-Command -Session $s -ScriptBlock {Wait-Job -Any}
이 예제에서는 Wait-Job
매개 변수를 사용하여 현재 세션에서 실행되는 여러 작업의 첫 번째 작업이 종료 상태인지 확인합니다. 또한 Wait-Job
cmdlet을 사용하여 원격 작업이 완료될 때까지 기다리는 방법도 보여줍니다.
첫 번째 명령은 Machines.txt 파일에 나열된 각 컴퓨터에 PSSession 만들고 PSSession 개체를 $s
변수에 저장합니다. 이 명령은 Get-Content
cmdlet을 사용하여 파일의 내용을 가져옵니다.
Get-Content
명령은 괄호로 묶어 New-PSSession
명령 전에 실행되도록 합니다.
두 번째 명령은 Get-EventLog
명령 문자열을 따옴표로 $c
변수에 저장합니다.
세 번째 명령은 Invoke-Command
cmdlet을 사용하여 Start-Job
각 세션에서 $s
실행합니다.
Start-Job
명령은 Get-EventLog
변수에서 $c
명령을 실행하는 작업을 시작합니다.
이 명령은 using 범위 한정자를 사용하여 $c
변수가 로컬 컴퓨터에 정의되었음을 나타냅니다.
Using 범위 한정자는 Windows PowerShell 3.0에서 도입되었습니다.
Using 범위 한정자에 대한 더 많은 정보는 about_Remote_Variables을 참조하세요.
네 번째 명령은 Invoke-Command
사용하여 세션에서 Wait-Job
명령을 실행합니다.
Any 매개 변수를 사용하여 원격 컴퓨터의 첫 번째 작업이 종료 중 상태가 될 때까지 기다립니다.
예제 4: 원격 컴퓨터의 작업에 대한 대기 시간 설정
PS> $s = New-PSSession -ComputerName Server01, Server02, Server03
PS> $jobs = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-Date}}
PS> $done = Invoke-Command -Session $s -ScriptBlock {Wait-Job -Timeout 30}
PS>
이 예제에서는 Wait-Job
매개 변수를 사용하여 원격 컴퓨터에서 실행되는 작업에 대한 최대 대기 시간을 설정하는 방법을 보여줍니다.
첫 번째 명령은 세 개의 원격 컴퓨터(Server01, Server02 및 Server03)에 PSSession 만든 다음 PSSession 개체를 $s
변수에 저장합니다.
두 번째 명령은 Invoke-Command
을 사용하여 Start-Job
안의 각 PSSession 개체에서 $s
을 실행합니다. 결과 작업 개체를 $jobs
변수에 저장합니다.
세 번째 명령은 Invoke-Command
사용하여 Wait-Job
각 세션에서 $s
실행합니다.
Wait-Job
명령은 모든 명령이 30초 이내에 완료되었는지 여부를 결정합니다. 값이 30인 Timeout 매개 변수를 사용하여 최대 대기 시간을 설정한 다음 명령 결과를 $done
변수에 저장합니다.
이 경우 30초 후에 Server02 컴퓨터의 명령만 완료되었습니다.
Wait-Job
대기를 종료하고 완료된 작업을 나타내는 개체를 반환하고 명령 프롬프트를 표시합니다.
$done
변수에는 Server02에서 실행된 작업을 나타내는 작업 개체가 포함되어 있습니다.
예제 5: 여러 작업 중 하나가 완료될 때까지 기다립니다.
Wait-Job -id 1, 2, 5 -Any
이 명령은 ID로 세 개의 작업을 식별하고 그 중 하나가 종료 상태에 있게 될 때까지 기다립니다. 첫 번째 작업이 완료되면 실행이 계속됩니다.
예제 6: 기간 동안 기다린 다음 백그라운드에서 작업을 계속하도록 허용
Wait-Job -Name "DailyLog" -Timeout 120
이 명령은 DailyLog 작업이 완료되기까지 120초(2분) 기다립니다. 다음 2분 동안 작업이 완료되지 않으면 실행이 계속되고 백그라운드에서 작업이 계속 실행됩니다.
예제 7: 이름으로 작업 대기
Wait-Job -Name "Job3"
이 명령은 작업 이름을 사용하여 대기할 작업을 식별합니다.
예제 8: Start-Job로 시작한 로컬 컴퓨터의 작업을 기다리기
$j = Start-Job -ScriptBlock {Get-ChildItem -Filter *.ps1 | Where-Object {$PSItem.LastWriteTime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
$j | Wait-Job
이 예제에서는 Wait-Job
사용하여 로컬 컴퓨터에서 시작된 작업과 함께 Start-Job
cmdlet을 사용하는 방법을 보여줍니다.
이러한 명령은 지난 주에 추가되거나 업데이트된 Windows PowerShell 스크립트 파일을 가져오는 작업을 시작합니다.
첫 번째 명령은 Start-Job
사용하여 로컬 컴퓨터에서 작업을 시작합니다. 작업은 지난 주에 추가되거나 업데이트된 .ps1 파일 이름 확장명이 있는 모든 파일을 가져오는 Get-ChildItem
명령을 실행합니다.
세 번째 명령은 Wait-Job
사용하여 작업이 종료 상태가 될 때까지 기다립니다. 작업이 완료되면 이 명령은 작업에 대한 정보를 포함하는 작업 개체를 표시합니다.
예제 9: Invoke-Command 사용하여 원격 컴퓨터에서 작업이 시작될 때까지 기다립니다.
$s = New-PSSession -ComputerName Server01, Server02, Server03
$j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
$j | Wait-Job
이 예제에서는 Wait-Job
AsJob 매개 변수를 사용하여 원격 컴퓨터에서 시작된 작업으로 Invoke-Command
사용하는 방법을 보여줍니다.
AsJob사용하는 경우 작업이 로컬 컴퓨터에 만들어지고 작업이 원격 컴퓨터에서 실행되는 경우에도 결과가 자동으로 로컬 컴퓨터로 반환됩니다.
이 예제에서는 Wait-Job
사용하여 세 원격 컴퓨터의 세션에서 실행되는 Get-Process
명령이 종료 상태인지 확인합니다.
첫 번째 명령은 세 대의 컴퓨터에 PSSession 개체를 만들고 $s
변수에 저장합니다.
두 번째 명령은 Invoke-Command
사용하여 Get-Process
세 세션 각각에서 $s
실행합니다.
이 명령은 AsJob 매개 변수를 사용하여 명령을 작업으로 비동기적으로 실행합니다. 이 명령은 Start-Job
사용하여 시작한 작업과 마찬가지로 작업 개체를 반환하고 작업 개체는 $j
변수에 저장됩니다.
세 번째 명령은 파이프라인 연산자(|
)를 사용하여 $j
작업 개체를 Wait-Job
cmdlet으로 보냅니다. 이 경우 작업이 로컬 컴퓨터에 있으므로 Invoke-Command
명령이 필요하지 않습니다.
예제 10: ID가 부여된 작업을 기다려야 합니다.
Get-Job
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Completed True localhost,Server01.. get-service
4 Job4 Completed True localhost dir | where
Wait-Job -Id 1
이 명령은 ID 값이 1인 작업을 기다립니다.
매개 변수
-Any
이 cmdlet은 작업 개체를 반환하고 작업이 완료되면 실행을 계속한다는 것을 나타냅니다. 기본적으로 Wait-Job
지정된 모든 작업이 완료될 때까지 기다린 후 프롬프트를 표시합니다.
형식: | SwitchParameter |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Filter
조건의 해시 테이블을 지정합니다. 이 cmdlet은 해시 테이블의 모든 조건을 충족하는 작업을 기다립니다. 키가 작업 속성이고 값이 작업 속성 값인 해시 테이블을 입력합니다.
이 매개 변수는 워크플로 작업 및 예약된 작업과 같은 사용자 지정 작업 유형에서만 작동합니다.
Start-Job
cmdlet을 사용하여 만든 작업과 같은 표준 작업에서는 작동하지 않습니다. 이 매개 변수에 대한 지원에 대한 자세한 내용은 작업 유형에 대한 도움말 항목을 참조하세요.
이 매개 변수는 Windows PowerShell 3.0에서 도입되었습니다.
형식: | Hashtable |
Position: | 0 |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | True |
와일드카드 문자 허용: | False |
-Force
이 cmdlet이 일시 중단됨 또는 연결 끊김 상태에서 작업을 계속 대기하고 있음을 나타냅니다. 기본적으로 Wait-Job
작업이 다음 상태 중 하나에 있을 때 대기를 반환하거나 종료합니다.
- 완료
- 실패
- 중지
- 일시 중단
- 연결이 끊어진
이 매개 변수는 Windows PowerShell 3.0에서 도입되었습니다.
형식: | SwitchParameter |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Id
이 cmdlet이 대기하는 작업의 ID 배열을 지정합니다.
ID는 현재 세션의 작업을 고유하게 식별하는 정수입니다. 인스턴스 ID보다 기억하고 입력하는 것이 더 쉽지만 현재 세션에서만 고유합니다. 하나 이상의 ID를 쉼표로 구분하여 입력할 수 있습니다. 작업의 ID를 찾으려면 Get-Job
입력합니다.
형식: | Int32[] |
Position: | 0 |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | True |
와일드카드 문자 허용: | False |
-InstanceId
이 cmdlet이 대기하는 작업의 인스턴스 ID 배열을 지정합니다. 기본값은 모든 작업입니다.
인스턴스 ID는 컴퓨터에서 작업을 고유하게 식별하는 GUID입니다. 작업의 인스턴스 ID를 찾으려면 Get-Job
사용합니다.
형식: | Guid[] |
Position: | 0 |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | True |
와일드카드 문자 허용: | False |
-Job
이 cmdlet이 대기하는 작업을 지정합니다. 작업 개체 또는 작업 개체를 가져오는 명령이 포함된 변수를 입력합니다. 파이프라인 연산자를 사용하여 작업 개체를 Wait-Job
cmdlet으로 보낼 수도 있습니다. 기본적으로 Wait-Job
현재 세션에서 만든 모든 작업을 기다립니다.
형식: | Job[] |
Position: | 0 |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | True |
와일드카드 문자 허용: | False |
-Name
이 cmdlet이 대기하는 작업의 이름을 지정합니다.
형식: | String[] |
Position: | 0 |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | True |
와일드카드 문자 허용: | False |
-State
작업 상태를 지정합니다. 이 cmdlet은 지정된 상태의 작업에 대해서만 대기합니다. 이 매개 변수에 허용되는 값은 다음과 같습니다.
- 시작되지 않음
- 달리기
- 완료
- 실패
- 중지
- 막힌
- 일시 중단
- 연결이 끊어진
- 일시 중단
- 중지
작업 상태에 대한 자세한 내용은 JobState 열거형참조하세요.
형식: | JobState |
허용되는 값: | NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint |
Position: | 0 |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | True |
와일드카드 문자 허용: | False |
-Timeout
각 작업에 대한 최대 대기 시간(초)을 지정합니다. 기본값 -1은 cmdlet이 작업이 완료될 때까지 대기한다는 것을 나타냅니다. 타이밍은 Wait-Job
명령이 아닌 Start-Job
명령을 제출할 때 시작됩니다.
이 시간을 초과하면 작업이 계속 실행되더라도 대기가 종료되고 실행이 계속됩니다. 명령에 오류 메시지가 표시되지 않습니다.
형식: | Int32 |
별칭: | TimeoutSec |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
입력
System.Management.Automation.RemotingJob
작업 개체를 이 cmdlet으로 파이프할 수 있습니다.
출력
System.Management.Automation.PSRemotingJob
이 cmdlet은 종료 상태의 작업을 나타내는 작업 개체를 반환합니다.
Timeout 매개 변수의 값이 초과되어 대기가 종료되면 Wait-Job
개체를 반환하지 않습니다.
참고
PowerShell에는 Wait-Job
다음과 같은 별칭이 포함되어 있습니다.
- 모든 플랫폼:
wjb
기본적으로 Wait-Job
작업이 다음 상태 중 하나에 있을 때 대기를 반환하거나 종료합니다.
- 완료
- 실패
- 중지
- 일시 중단
- 연결이 끊어진
Wait-Job
가 일시 중단된 작업과 연결이 끊긴 작업을 계속 기다리도록 하려면 Force 매개 변수를 사용합니다.
관련 링크
PowerShell