다음을 통해 공유


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-JobWait-Job 명령은 모두 Invoke-Command cmdlet을 사용하여 원격 컴퓨터에 제출됩니다.

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

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

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

세 번째 명령은 Invoke-Command 사용하여 wait-Job실행합니다. 이 명령은 각 컴퓨터의 Date1 작업이 완료되기를 기다립니다. $done 변수에 작업 개체의 결과 컬렉션(배열)을 저장합니다.

네 번째 명령은 $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에서 도입되었습니다. 범위 한정자를 사용하는 대한 자세한 내용은 about_Remote_Variables()를 참조하세요.

네 번째 명령은 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 매개 변수를 사용합니다.