다음을 통해 공유


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

cmdlet은 Wait-Job 실행을 계속하기 전에 작업이 종료 상태가 될 때까지 기다립니다. 종료 상태는 다음과 같습니다.

  • Completed
  • 실패
  • 중지됨
  • 일시 중단
  • 연결 끊김

지정된 작업 또는 모든 작업이 종료 상태가 될 때까지 기다릴 수 있습니다. Timeout 매개 변수를 사용하여 작업에 대한 최대 대기 시간을 설정하거나 Force 매개 변수를 사용하여 또는 Disconnected 상태의 Suspended 작업을 대기할 수도 있습니다.

작업의 명령이 완료되면 Wait-Job 작업 개체를 반환하고 실행을 계속합니다.

cmdlet을 Wait-Job 사용하여 cmdlet 또는 cmdlet의 Invoke-Command AsJob 매개 변수를 사용하여 Start-Job 시작된 작업을 기다릴 수 있습니다. 작업에 대한 자세한 내용은 about_Jobs를 참조하세요.

Windows PowerShell 3.0 Wait-Job 부터 cmdlet은 워크플로 작업 및 예약된 작업의 인스턴스와 같은 사용자 지정 작업 유형도 기다립니다. Wait-Job 특정 형식의 작업을 대기하려면 cmdlet을 사용하거나 모듈에서 cmdlet을 사용 Import-Module 하거나 가져와서 cmdlet을 실행 Get-Job 하기 전에 사용자 지정 작업 유형을 지원하는 모듈을 세션으로 가져옵니다. 특정 사용자 지정 작업 유형에 대한 자세한 내용은 사용자 지정 작업 유형 기능의 설명서를 참조하세요.

예제

예제 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

이 예제에서는 cmdlet을 Wait-Job 사용하여 원격 컴퓨터에서 시작된 작업으로 cmdlet을 Start-Job 사용하는 방법을 보여줍니다. 명령과 Wait-Job 명령 모두 Start-Job cmdlet을 사용하여 Invoke-Command 원격 컴퓨터에 제출됩니다.

이 예제에서는 Wait-Job 세 개의 다른 컴퓨터에서 작업으로 실행 중인 명령이 완료되었는지 여부를 Get-Date 확인합니다.

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

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

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

네 번째 명령은 변수에 있는 작업 개체 배열의 Count 속성을 사용하여 완료된 작업 수를 결정합니다$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}

이 예제에서는 Any 매개 변수 Wait-Job 를 사용하여 현재 세션에서 실행 중인 여러 작업의 첫 번째 작업이 종료 상태인지 확인합니다. 또한 cmdlet을 Wait-Job 사용하여 원격 작업이 완료될 때까지 기다리는 방법을 보여줍니다.

첫 번째 명령은 Machines.txt 파일에 나열된 각 컴퓨터에 PSSession을 만들고 PSSession 개체를 변수에 $s 저장합니다. 이 명령은 cmdlet을 Get-Content 사용하여 파일의 내용을 가져옵니다. Get-Content 명령은 명령 앞에 New-PSSession 실행되도록 괄호로 묶습니다.

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

세 번째 명령은 cmdlet을 사용하여 Invoke-Command 의 각 세션에서 $s실행됩니다Start-Job. 이 Start-Job 명령은 변수에서 $c 명령을 실행하는 Get-EventLog 작업을 시작합니다.

이 명령은 Using 범위 한정자를 사용하여 변수가 $c 로컬 컴퓨터에 정의되었음을 나타냅니다. Using 범위 한정자는 Windows PowerShell 3.0에서 도입되었습니다. 사용 범위 한정자에 대한 자세한 내용은 about_Remote_Variables 참조하세요.

네 번째 명령은 세션에서 명령을 실행하는 Wait-Job 데 사용합니다Invoke-Command. 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>

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

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

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

세 번째 명령은 .의 각 세션에서 $s실행하는 Wait-Job 데 사용합니다Invoke-Command. 이 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: 시작 작업으로 시작된 로컬 컴퓨터의 작업 대기

$j = Start-Job -ScriptBlock {Get-ChildItem -Filter *.ps1| Where-Object {$PSItem.LastWriteTime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
$j | Wait-Job

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

이 명령은 지난주에 추가 또는 업데이트된 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

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

이 예제에서는 Wait-Job 세 원격 컴퓨터의 세션에서 실행 중인 명령이 종료 상태인지 여부를 Get-Process 확인합니다.

첫 번째 명령은 세 대의 컴퓨터에 PSSession 개체를 만들고 변수에 $s 저장합니다.

두 번째 명령은 .의 세 세션 각각에서 $s실행하는 Get-Process 데 사용합니다Invoke-Command. 이 명령은 AsJob 매개 변수를 사용하여 명령을 작업으로 비동기적으로 실행합니다. 이 명령은 작업 개체를 사용하여 Start-Job시작한 작업과 마찬가지로 반환하고 작업 개체는 변수에 $j 저장됩니다.

세 번째 명령은 파이프라인 연산자(|)를 사용하여 작업 개체를 cmdlet에 $j Wait-Job 보냅니다. 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은 해시 테이블의 모든 조건을 충족하는 작업을 기다립니다. 키가 작업 속성이고 값이 작업 속성 값인 해시 테이블을 입력합니다.

이 매개 변수는 워크플로 작업, 예약된 작업 등의 사용자 지정 작업 유형에서만 적용됩니다. cmdlet을 사용하여 만든 작업과 같은 표준 작업에서는 Start-Job 작동하지 않습니다. 이 매개 변수 지원에 대한 자세한 내용은 작업 유형 도움말 항목을 참조하세요.

이 매개 변수는 Windows PowerShell 3.0에서 도입되었습니다.

형식:Hashtable
Position:0
Default value:None
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-Force

이 cmdlet이 일시 중단됨 또는 연결 끊김 상태에서 작업을 계속 대기하고 있음을 나타냅니다. 기본적으로 Wait-Job 작업이 다음 상태 중 하나에 있는 경우 대기를 반환하거나 종료합니다.

  • Completed
  • 실패
  • 중지됨
  • 일시 중단
  • 연결 끊김

이 매개 변수는 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이 대기하는 작업을 지정합니다. 작업 개체가 포함된 변수 또는 작업 개체를 가져오는 명령을 입력하세요. 파이프라인 연산자를 사용하여 cmdlet에 작업 개체를 Wait-Job 보낼 수도 있습니다. 기본적으로 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
  • 실행 중
  • Completed
  • 실패
  • 중지됨
  • 차단됨
  • 일시 중단
  • 연결 끊김
  • Suspending
  • 중지 중

작업 상태에 대한 자세한 내용은 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 작업이 다음 상태 중 하나에 있는 경우 대기를 반환하거나 종료합니다.

  • Completed
  • 실패
  • 중지됨
  • 일시 중단
  • 연결 끊김

Wait-Job 일시 중단 및 연결이 끊긴 작업을 계속 기다리려면 Force 매개 변수를 사용합니다.