다음을 통해 공유


Receive-Job

현재 세션에서 PowerShell 백그라운드 작업의 결과를 가져옵니다.

구문

Receive-Job
       [-Job] <Job[]>
       [[-Location] <String[]>]
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [<CommonParameters>]
Receive-Job
       [-Job] <Job[]>
       [[-ComputerName] <String[]>]
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [<CommonParameters>]
Receive-Job
       [-Job] <Job[]>
       [[-Session] <PSSession[]>]
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [<CommonParameters>]
Receive-Job
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [-Name] <String[]>
       [<CommonParameters>]
Receive-Job
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [-InstanceId] <Guid[]>
       [<CommonParameters>]
Receive-Job
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [-Id] <Int32[]>
       [<CommonParameters>]

Description

Receive-Job cmdlet은 Start-Job cmdlet 또는 모든 cmdlet의 AsJob 매개 변수를 사용하여 시작한 작업과 같은 PowerShell 백그라운드 작업의 결과를 가져옵니다. 모든 작업의 결과를 가져오거나 이름, ID, 인스턴스 ID, 컴퓨터 이름, 위치 또는 세션 또는 작업 개체를 제출하여 작업을 식별할 수 있습니다.

PowerShell 백그라운드 작업을 시작하면 작업이 시작되지만 결과가 즉시 표시되지는 않습니다. 대신 이 명령은 백그라운드 작업을 나타내는 개체를 반환합니다. 작업 개체는 작업에 대한 유용한 정보를 포함하지만 결과가 포함되지 않습니다. 이 메서드를 사용하면 작업이 실행되는 동안 세션에서 작업을 계속할 수 있습니다. PowerShell의 백그라운드 작업에 대한 자세한 내용은 about_Jobs참조하세요.

Receive-Job cmdlet은 Receive-Job 명령이 제출될 때까지 생성된 결과를 가져옵니다. 결과가 아직 완료되지 않은 경우 추가 Receive-Job 명령을 실행하여 나머지 결과를 가져올 수 있습니다.

기본적으로 작업 결과는 받을 때 시스템에서 삭제되지만 Keep 매개 변수를 사용하여 결과를 다시 받을 수 있도록 저장할 수 있습니다. 작업 결과를 삭제하려면 Keep 매개 변수 없이 Receive-Job 명령을 다시 실행하거나 세션을 닫거나 Remove-Job cmdlet을 사용하여 세션에서 작업을 삭제합니다.

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

예제

예제 1: 특정 작업에 대한 결과 가져오기

$job = Start-Job -ScriptBlock {Get-Process}
Receive-Job -Job $job

이러한 명령은 Receive-JobJob 매개 변수를 사용하여 특정 작업의 결과를 가져옵니다.

첫 번째 명령은 Start-Job 사용하여 작업을 시작하고 작업 개체를 $job 변수에 저장합니다.

두 번째 명령은 Receive-Job cmdlet을 사용하여 작업 결과를 가져옵니다. Job 매개 변수를 사용하여 작업을 지정합니다.

예제 2: Keep 매개 변수 사용

$job = Start-Job -ScriptBlock {Get-Service dhcp, fakeservice}
$job | Receive-Job -Keep

Cannot find any service with service name 'fakeservice'.
    + CategoryInfo          : ObjectNotFound: (fakeservice:String) [Get-Service], ServiceCommandException
    + FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.GetServiceCommand
    + PSComputerName        : localhost

Status   Name               DisplayName
------   ----               -----------
Running  dhcp               DHCP Client

$job | Receive-Job -Keep

Cannot find any service with service name 'fakeservice'.
    + CategoryInfo          : ObjectNotFound: (fakeservice:String) [Get-Service], ServiceCommandException
    + FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.GetServiceCommand
    + PSComputerName        : localhost

Status   Name               DisplayName
------   ----               -----------
Running  dhcp               DHCP Client

다음은 작업을 $job 변수에 저장하고 작업을 Receive-Job cmdlet으로 파이프하는 예제입니다. 또한 -Keep 매개 변수를 사용하여 집계된 모든 스트림 데이터를 첫 번째 보기 후에 다시 검색할 수 있습니다.

예제 3: 여러 백그라운드 작업의 결과 가져오기

Invoke-Command AsJob 매개 변수를 사용하여 작업을 시작하면 작업이 원격 컴퓨터에서 실행되는 경우에도 작업 개체가 로컬 컴퓨터에 만들어집니다. 결과적으로 로컬 명령을 사용하여 작업을 관리합니다.

또한 AsJob사용하면 PowerShell은 시작된 각 작업에 대한 자식 작업이 포함된 하나의 작업 개체를 반환합니다. 이 경우 작업 개체에는 각 원격 컴퓨터의 각 작업에 대해 하나씩 3개의 자식 작업이 포함됩니다.

# Use the Invoke-Command cmdlet with the -AsJob parameter to start a background job that runs a Get-Service command on three remote computers.
# Store the resulting job object in the $j variable
$j = Invoke-Command -ComputerName Server01, Server02, Server03 -ScriptBlock {Get-Service} -AsJob
# Display the value of the **ChildJobs** property of the job object in $j.
# The display shows that the command created three child jobs, one for the job on each remote computer.
# You could also use the -IncludeChildJobs parameter of the Get-Job cmdlet.
$j.ChildJobs

Id   Name     State      HasMoreData   Location       Command
--   ----     -----      -----------   --------       -------
2    Job2     Completed  True          Server01       Get-Service
3    Job3     Completed  True          Server02       Get-Service
4    Job4     Completed  True          Server03       Get-Service

# Use the Receive-Job cmdlet to get the results of just the Job3 child job that ran on the Server02 computer.
# Use the *Keep* parameter to allow you to view the aggregated stream data more than once.
Receive-Job -Name Job3 -Keep

Status  Name        DisplayName                        PSComputerName
------  ----------- -----------                        --------------
Running AeLookupSvc Application Experience             Server02
Stopped ALG         Application Layer Gateway Service  Server02
Running Appinfo     Application Information            Server02
Running AppMgmt     Application Management             Server02

예제 4: 여러 원격 컴퓨터에서 백그라운드 작업 결과 가져오기

# Use the New-PSSession cmdlet to create three user-managed PSSessions on three servers, and save the sessions in the $s variable.
$s = New-PSSession -ComputerName Server01, Server02, Server03
# Use Invoke-Command run a Start-Job command in each of the PSSessions in the $s variable.
# The job outputs the ComputerName of each server.
# Save the job objects in the $j variable.
$j = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$env:COMPUTERNAME}}
# To confirm that these job objects are from the remote machines, run Get-Job to show no local jobs running.
Get-Job



# Display the three job objects in $j.
# Note that the Localhost location is not the local computer, but instead localhost as it relates to the job on each Server.
$j

Id   Name     State      HasMoreData   Location   Command
--   ----     -----      -----------   --------   -------
1    Job1     Completed  True          Localhost  $env:COMPUTERNAME
2    Job2     Completed  True          Localhost  $env:COMPUTERNAME
3    Job3     Completed  True          Localhost  $env:COMPUTERNAME

# Use Invoke-Command to run a Receive-Job command in each of the sessions in the $s variable and save the results in the $Results variable.
# The Receive-Job command must be run in each session because the jobs were run locally on each server.
$results = Invoke-Command -Session $s -ScriptBlock {Receive-Job -Job $Using:j}

Server01
Server02
Server03

이 예제에서는 세 개의 원격 컴퓨터에서 실행되는 백그라운드 작업의 결과를 가져오는 방법을 보여줍니다. 이전 예제와 달리 Invoke-Command 사용하여 Start-Job 명령을 실행하면 실제로 세 대의 컴퓨터 각각에서 3개의 독립적인 작업이 시작되었습니다. 결과적으로 이 명령은 세 개의 다른 컴퓨터에서 로컬로 실행되는 세 개의 작업을 나타내는 세 개의 작업 개체를 반환했습니다.

메모

마지막 명령에서 $j 지역 변수이므로 스크립트 블록은 using 범위 한정자를 사용하여 $j 변수를 식별합니다. using 범위 한정자에 대한 자세한 내용은 about_Remote_Variables참조하세요.

예제 5: 자식 작업 액세스

-Keep 매개 변수는 다시 볼 수 있도록 작업의 집계된 스트림 상태를 유지합니다. 이 매개 변수가 없으면 작업이 수신될 때 집계된 모든 스트림 데이터가 지워집니다. 자세한 내용은 about_Job_Details 참조하세요.

메모

집계된 스트림에는 모든 자식 작업의 스트림이 포함됩니다. 작업 개체 및 자식 작업 개체를 통해 데이터의 개별 스트림에 연결할 수 있습니다.

Start-Job -Name TestJob -ScriptBlock {dir C:\, Z:\}
# Without the Keep parameter, aggregated child job data is displayed once.
# Then destroyed.
Receive-Job -Name TestJob

Directory: C:\

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-r---        1/24/2019   7:11 AM                Program Files
d-r---        2/13/2019   8:32 AM                Program Files (x86)
d-r---        10/3/2018  11:47 AM                Users
d-----         2/7/2019   1:52 AM                Windows
Cannot find drive. A drive with the name 'Z' does not exist.
    + CategoryInfo          : ObjectNotFound: (Z:String) [Get-ChildItem], DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
    + PSComputerName        : localhost

# It would seem that the child job data is gone.
Receive-Job -Name TestJob



# Using the object model, you can still retrieve child job data and streams.
$job = Get-Job -Name TestJob
$job.ChildJobs[0].Error

Cannot find drive. A drive with the name 'Z' does not exist.
    + CategoryInfo          : ObjectNotFound: (Z:String) [Get-ChildItem], DriveNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
    + PSComputerName        : localhost

매개 변수

-AutoRemoveJob

이 cmdlet은 작업 결과를 반환한 후 작업을 삭제한다는 것을 나타냅니다. 작업에 더 많은 결과가 있는 경우 작업은 여전히 삭제되지만 Receive-Job 메시지를 표시합니다.

이 매개 변수는 사용자 지정 작업 유형에서만 작동합니다. 예약된 작업의 인스턴스와 같이 작업 또는 세션 외부의 형식을 저장하는 작업 유형의 인스턴스를 위해 설계되었습니다.

이 매개 변수는 Wait 매개 변수 없이는 사용할 수 없습니다.

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

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

-ComputerName

컴퓨터 이름의 배열을 지정합니다.

이 매개 변수는 로컬 컴퓨터에 저장된 작업 결과 중에서 선택합니다. 원격 컴퓨터에서 실행되는 작업에 대한 데이터는 가져올 수 없습니다. 원격 컴퓨터에 저장된 작업 결과를 얻으려면 Invoke-Command cmdlet을 사용하여 원격으로 Receive-Job 명령을 실행합니다.

형식:String[]
별칭:Cn
Position:1
Default value:All computers available
필수:False
파이프라인 입력 허용:True
와일드카드 문자 허용:True

-Force

작업이 일시 중단된 또는 연결이 끊긴 상태인 경우 이 cmdlet이 계속 대기 중임을 나타냅니다. 기본적으로 Receive-JobWait 매개 변수는 작업이 다음 상태 중 하나에 있을 때 대기를 반환하거나 종료합니다.

  • 완료
  • 실패
  • 중지
  • 일시 중단
  • 연결이 끊어진.

Force 매개 변수는 Wait 매개 변수가 명령에 사용되는 경우에만 유효합니다.

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

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

-Id

ID 배열을 지정합니다. 이 cmdlet은 지정된 ID를 사용하여 작업의 결과를 가져옵니다.

ID는 현재 세션의 작업을 고유하게 식별하는 정수입니다. 인스턴스 ID보다 기억하고 입력하는 것이 더 쉽지만 현재 세션에서만 고유합니다. 하나 이상의 ID를 쉼표로 구분하여 입력할 수 있습니다. 작업의 ID를 찾으려면 Get-Job사용합니다.

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

-InstanceId

인스턴스 ID의 배열을 지정합니다. 이 cmdlet은 지정된 인스턴스 ID를 사용하여 작업의 결과를 가져옵니다.

인스턴스 ID는 컴퓨터에서 작업을 고유하게 식별하는 GUID입니다. 작업의 인스턴스 ID를 찾으려면 Get-Job cmdlet을 사용합니다.

형식:Guid[]
Position:0
Default value:All instances
필수:True
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-Job

결과를 검색할 작업을 지정합니다.

작업을 가져오는 명령이나 작업이 포함된 변수를 입력합니다. 작업 개체를 Receive-Job파이프할 수도 있습니다.

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

-Keep

이 cmdlet은 집계된 스트림 데이터를 받은 후에도 시스템에 저장한다는 것을 나타냅니다. 기본적으로 집계된 스트림 데이터는 Receive-Job사용하여 본 후에 지워집니다.

세션을 닫거나 Remove-Job cmdlet을 사용하여 작업을 제거하면 집계된 스트림 데이터도 삭제됩니다.

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

-Location

위치 배열을 지정합니다. 이 cmdlet은 지정된 위치에 있는 작업의 결과만 가져옵니다.

형식:String[]
Position:1
Default value:All locations
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Name

친숙한 이름의 배열을 지정합니다. 이 cmdlet은 지정된 이름을 가진 작업의 결과를 가져옵니다. 와일드카드 문자가 지원됩니다.

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

-NoRecurse

이 cmdlet은 지정된 작업에서만 결과를 가져옵니다. 기본적으로 Receive-Job 지정된 작업의 모든 자식 작업의 결과도 가져옵니다.

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

-Session

세션 배열을 지정합니다. 이 cmdlet은 지정된 PowerShell 세션(PSSession)에서 실행된 작업의 결과를 가져옵니다. PSSession 포함하는 변수 또는 Get-PSSession 명령과 같은 PSSession가져오는 명령을 입력합니다.

형식:PSSession[]
Position:1
Default value:All sessions
필수:False
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-Wait

이 cmdlet은 모든 작업 결과를 받을 때까지 명령 프롬프트를 표시하지 않음을 나타냅니다. 기본적으로 Receive-Job 사용 가능한 결과를 즉시 반환합니다.

기본적으로 Wait 매개 변수는 작업이 다음 상태 중 하나일 때까지 대기합니다.

  • 완료
  • 실패
  • 중지
  • 일시 중단
  • 연결이 끊어진.

Wait 매개 변수에 작업 상태가 일시 중단되거나 연결이 끊긴 경우 계속 대기하도록 하려면 Wait 매개 변수와 함께 Force 매개 변수를 사용합니다.

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

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

-WriteEvents

이 cmdlet은 작업이 완료될 때까지 기다리는 동안 작업 상태의 변경 내용을 보고합니다.

이 매개 변수는 명령에서 Wait 매개 변수를 사용하고 Keep 매개 변수를 생략한 경우에만 유효합니다.

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

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

-WriteJobInResults

이 cmdlet이 작업 개체를 반환한 다음 결과를 반환한다는 것을 나타냅니다.

이 매개 변수는 명령에서 Wait 매개 변수를 사용하고 Keep 매개 변수를 생략한 경우에만 유효합니다.

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

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

입력

Job

작업 개체를 이 cmdlet으로 파이프할 수 있습니다.

출력

PSObject

이 cmdlet은 작업의 명령 결과를 반환합니다.