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