Receive-Job

Pobiera wyniki zadań w tle programu PowerShell w bieżącej sesji.

Składnia

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>]

Opis

Polecenie Receive-Job cmdlet pobiera wyniki zadań w tle programu PowerShell, takich jak te uruchomione przy użyciu Start-Job polecenia cmdlet lub parametru AsJob dowolnego polecenia cmdlet. Możesz uzyskać wyniki wszystkich zadań lub zidentyfikować zadania według ich nazwy, identyfikatora wystąpienia, nazwy komputera, lokalizacji lub sesji albo przesyłając obiekt zadania.

Po uruchomieniu zadania w tle programu PowerShell zadanie zostanie uruchomione, ale wyniki nie są wyświetlane natychmiast. Zamiast tego polecenie zwraca obiekt reprezentujący zadanie w tle. Obiekt zadania zawiera przydatne informacje o zadaniu, ale nie zawiera wyników. Ta metoda umożliwia kontynuowanie pracy w sesji podczas uruchamiania zadania. Aby uzyskać więcej informacji na temat zadań w tle w programie PowerShell, zobacz about_Jobs.

Polecenie Receive-Job cmdlet pobiera wyniki wygenerowane przez czas Receive-Job przesłania polecenia. Jeśli wyniki nie zostały jeszcze ukończone, możesz uruchomić dodatkowe Receive-Job polecenia, aby uzyskać pozostałe wyniki.

Domyślnie wyniki zadania są usuwane z systemu po ich otrzymaniu, ale można użyć parametru Keep , aby zapisać wyniki, aby można było je ponownie odebrać. Aby usunąć wyniki zadania, uruchom Receive-Job ponownie polecenie bez parametru Keep , zamknij sesję lub użyj Remove-Job polecenia cmdlet , aby usunąć zadanie z sesji.

Począwszy od Windows PowerShell 3.0, Receive-Job otrzymuje również wyniki niestandardowych typów zadań, takich jak zadania przepływu pracy i wystąpienia zaplanowanych zadań. Aby umożliwić Receive-Job uzyskanie wyników niestandardowego typu zadania, zaimportuj moduł obsługujący niestandardowy typ zadania do sesji przed uruchomieniem Receive-Job polecenia za pomocą polecenia cmdlet lub za pomocą Import-Module polecenia cmdlet lub uzyskania polecenia cmdlet w module. Aby uzyskać informacje o określonym niestandardowym typie zadania, zobacz dokumentację funkcji niestandardowego typu zadania.

Przykłady

Przykład 1. Pobieranie wyników dla określonego zadania

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

Te polecenia używają parametru Zadania , Receive-Job aby uzyskać wyniki określonego zadania.

Pierwsze polecenie uruchamia zadanie za pomocą polecenia Start-Job i przechowuje obiekt zadania w zmiennej $job .

Drugie polecenie używa Receive-Job polecenia cmdlet, aby uzyskać wyniki zadania. Używa parametru Job do określenia zadania.

Przykład 2. Używanie parametru 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

W tym przykładzie zadanie jest przechowywane w zmiennej $job i potokuje zadanie do Receive-Job polecenia cmdlet. Parametr -Keep służy również do ponownego pobierania wszystkich zagregowanych danych strumienia po pierwszym wyświetleniu.

Przykład 3. Pobieranie wyników kilku zadań w tle

Podczas uruchamiania zadania za pomocą parametru Invoke-CommandAsJob obiekt zadania jest tworzony na komputerze lokalnym, mimo że zadanie jest uruchamiane na komputerach zdalnych. W rezultacie można zarządzać zadaniem za pomocą poleceń lokalnych.

Ponadto w przypadku korzystania z zadania AsJob program PowerShell zwraca jeden obiekt zadania, który zawiera zadanie podrzędne dla każdego uruchomionego zadania. W takim przypadku obiekt zadania zawiera trzy zadania podrzędne, jeden dla każdego zadania na każdym komputerze zdalnym.

# 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

Przykład 4. Pobieranie wyników zadań w tle na wielu komputerach zdalnych

# 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 creates a new job with a custom name to each server
# The job outputs the datetime from each server
# Save the job objects in the $j variable.
$j = Invoke-Command -Session $s -ScriptBlock {​Start-Job -Name $('MyJob-' +$env:COMPUTERNAME) -ScriptBlock {(Get-Date).ToString()​}​}
# 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    MyJob-Server01     Completed  True          Localhost  (Get-Date).ToString()
2    MyJob-Server02     Completed  True          Localhost  (Get-Date).ToString()
3    MyJob-Server03     Completed  True          Localhost  (Get-Date).ToString()

# 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 -Name $('MyJob-' +$env:COMPUTERNAME)}

3/22/2021 7:41:47 PM
3/22/2021 7:41:47 PM
3/22/2021 9:41:47 PM

W tym przykładzie pokazano, jak uzyskać wyniki zadań w tle uruchamianych na trzech komputerach zdalnych. W przeciwieństwie do poprzedniego przykładu Start-Job użycie polecenia Invoke-Command do uruchomienia polecenia rzeczywiście uruchomiło trzy niezależne zadania na każdym z trzech komputerów. W rezultacie polecenie zwróciło trzy obiekty zadań reprezentujące trzy zadania uruchomione lokalnie na trzech różnych komputerach.

Przykład 5. Uzyskiwanie dostępu do zadań podrzędnych

Parametr -Keep zachowuje stan zagregowanych strumieni zadania, aby można było go ponownie wyświetlić. Bez tego parametru wszystkie zagregowane dane strumienia są usuwane po odebraniu zadania. Aby uzyskać więcej informacji, zobacz about_Job_Details

Uwaga

Zagregowane strumienie obejmują strumienie wszystkich zadań podrzędnych. Nadal można uzyskać dostęp do poszczególnych strumieni danych za pośrednictwem obiektów zadania i obiektów podrzędnych zadań.

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

Parametry

-AutoRemoveJob

Wskazuje, że to polecenie cmdlet usuwa zadanie po powrocie wyników zadania. Jeśli zadanie ma więcej wyników, zadanie jest nadal usuwane, ale Receive-Job wyświetla komunikat.

Ten parametr działa tylko w przypadku niestandardowych typów zadań. Jest przeznaczony dla wystąpień typów zadań, które zapisują zadanie lub typ poza sesją, na przykład wystąpienia zaplanowanych zadań.

Tego parametru nie można użyć bez parametru Wait .

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False
-ComputerName

Określa tablicę nazw komputerów.

Ten parametr wybiera spośród wyników zadania, które są przechowywane na komputerze lokalnym. Nie pobiera danych dla zadań uruchamianych na komputerach zdalnych. Aby uzyskać wyniki zadania przechowywane na komputerach zdalnych, użyj Invoke-Command polecenia cmdlet , aby zdalnie uruchomić Receive-Job polecenie .

Type:String[]
Aliases:Cn
Position:1
Default value:All computers available
Accept pipeline input:True
Accept wildcard characters:True
-Force

Wskazuje, że to polecenie cmdlet nadal oczekuje, jeśli zadania są w stanie Zawieszone lub Rozłączone . Domyślnie parametr Receive-JobWait zwraca lub kończy oczekiwanie, gdy zadania znajdują się w jednym z następujących stanów:

  • Ukończone
  • Niepowodzenie
  • Zatrzymano
  • Suspended
  • Odłączony.

Parametr Force jest prawidłowy tylko wtedy, gdy parametr Wait jest również używany w poleceniu .

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False
-Id

Określa tablicę identyfikatorów. To polecenie cmdlet pobiera wyniki zadań z określonymi identyfikatorami.

Identyfikator jest liczbą całkowitą, która jednoznacznie identyfikuje zadanie w bieżącej sesji. Łatwiej jest zapamiętać i wpisać identyfikator wystąpienia, ale jest on unikatowy tylko w bieżącej sesji. Możesz wpisać jeden lub więcej identyfikatorów rozdzielonych przecinkami. Aby znaleźć identyfikator zadania, użyj polecenia Get-Job.

Type:Int32[]
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters:False
-InstanceId

Określa tablicę identyfikatorów wystąpień. To polecenie cmdlet pobiera wyniki zadań z określonymi identyfikatorami wystąpień.

Identyfikator wystąpienia to identyfikator GUID, który jednoznacznie identyfikuje zadanie na komputerze. Aby znaleźć identyfikator wystąpienia zadania, użyj Get-Job polecenia cmdlet .

Type:Guid[]
Position:0
Default value:All instances
Accept pipeline input:True
Accept wildcard characters:False
-Job

Określa zadanie, dla którego są pobierane wyniki.

Wprowadź zmienną zawierającą zadanie lub polecenie, które pobiera zadanie. Możesz również przekazać potok obiektu zadania do Receive-Jobobiektu .

Type:Job[]
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters:False
-Keep

Wskazuje, że to polecenie cmdlet zapisuje zagregowane dane strumienia w systemie nawet po ich odebraniu. Domyślnie zagregowane dane strumienia są usuwane po wyświetleniu za pomocą polecenia Receive-Job.

Zamknięcie sesji lub usunięcie zadania za pomocą Remove-Job polecenia cmdlet powoduje również usunięcie zagregowanych danych strumienia.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False
-Location

Określa tablicę lokalizacji. To polecenie cmdlet pobiera tylko wyniki zadań w określonych lokalizacjach.

Type:String[]
Position:1
Default value:All locations
Accept pipeline input:False
Accept wildcard characters:False
-Name

Określa tablicę przyjaznych nazw. To polecenie cmdlet pobiera wyniki zadań, które mają określone nazwy. Obsługiwane są symbole wieloznaczne.

Type:String[]
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters:True
-NoRecurse

Wskazuje, że to polecenie cmdlet pobiera wyniki tylko z określonego zadania. Domyślnie Receive-Job pobiera również wyniki wszystkich podrzędnych zadań określonego zadania.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False
-Session

Określa tablicę sesji. To polecenie cmdlet pobiera wyniki zadań, które zostały uruchomione w określonej sesji programu PowerShell (PSSession). Wprowadź zmienną zawierającą polecenie PSSession lub polecenie, które pobiera polecenie PSSession, takie jak Get-PSSession polecenie.

Type:PSSession[]
Position:1
Default value:All sessions
Accept pipeline input:True
Accept wildcard characters:False
-Wait

Wskazuje, że to polecenie cmdlet pomija wiersz polecenia do momentu odebrania wszystkich wyników zadania. Domyślnie Receive-Job natychmiast zwraca dostępne wyniki.

Domyślnie parametr Wait czeka, aż zadanie będzie w jednym z następujących stanów:

  • Ukończone
  • Niepowodzenie
  • Zatrzymano
  • Suspended
  • Odłączony.

Aby skierować parametr Wait , aby kontynuować oczekiwanie, jeśli stan zadania jest zawieszony lub rozłączony, użyj parametru Force razem z parametrem Wait .

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-WriteEvents

Wskazuje, że to polecenie cmdlet zgłasza zmiany w stanie zadania podczas oczekiwania na zakończenie zadania.

Ten parametr jest prawidłowy tylko wtedy, gdy parametr Wait jest używany w poleceniu, a parametr Keep zostanie pominięty.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False
-WriteJobInResults

Wskazuje, że to polecenie cmdlet zwraca obiekt zadania, a następnie wyniki.

Ten parametr jest prawidłowy tylko wtedy, gdy parametr Wait jest używany w poleceniu, a parametr Keep zostanie pominięty.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

Dane wejściowe

Job

Obiekty zadań można potokować do tego polecenia cmdlet.

Dane wyjściowe

PSObject

To polecenie cmdlet zwraca wyniki poleceń w zadaniu.