Udostępnij za pośrednictwem


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
       [-Name] <string[]>
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [<CommonParameters>]
Receive-Job
       [-InstanceId] <guid[]>
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [<CommonParameters>]
Receive-Job
       [-Id] <int[]>
       [-Keep]
       [-NoRecurse]
       [-Force]
       [-Wait]
       [-AutoRemoveJob]
       [-WriteEvents]
       [-WriteJobInResults]
       [<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, 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 będą 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 zadań 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 programu Windows PowerShell 3.0, Receive-Job pobiera 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 typ zadania niestandardowego do sesji przed uruchomieniem Receive-Job polecenia za pomocą Import-Module polecenia cmdlet lub przez pobranie polecenia cmdlet w module. Aby uzyskać informacje na temat określonego niestandardowego typu 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}
Start-Sleep -Seconds 1
Receive-Job -Job $job

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

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

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

Przykład 2. Używanie parametru Keep

$job = Start-Job -ScriptBlock {Get-Service dhcp, fakeservice}
Start-Sleep -Seconds 1
$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 jest również używany do zezwalania na ponowne pobieranie wszystkich zagregowanych danych strumienia po pierwszym widoku.

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

Jeśli używasz parametru Invoke-Command AsJob do uruchomienia zadania, obiekt zadania jest tworzony na komputerze lokalnym, mimo że zadanie jest uruchamiane na komputerach zdalnych. W związku z tym polecenia lokalne służą do zarządzania zadaniem.

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, po jednym 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 code 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.
$invokeCommandSplat = @{
    Session = $s
    ScriptBlock = {
        Start-Job -Name $('MyJob-' +$env:COMPUTERNAME) -ScriptBlock {
            (Get-Date).ToString()
        }
    }
}
$j = Invoke-Command @invokeCommandSplat
# 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ładuStart-Job, używając polecenia Invoke-Command , aby uruchomić polecenie, faktycznie uruchomiono 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, dzięki czemu można 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 zwracaniu 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 ona przeznaczona dla wystąpień typów zadań, które zapisują zadanie lub typ poza sesją, takie jak wystąpienia zaplanowanych zadań.

Nie można użyć tego parametru bez parametru Wait .

Ten parametr został wprowadzony w programie Windows PowerShell 3.0.

Typ:SwitchParameter
Position:Named
Domyślna wartość:False
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-ComputerName

Określa tablicę nazw komputerów.

Ten parametr wybiera spośród wyników zadania przechowywanych 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.

Typ:String[]
Aliasy:Cn
Position:1
Domyślna wartość:All computers available
Wymagane:False
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:True

-Force

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

  • Ukończone
  • Niepowodzenie
  • Zatrzymana
  • Suspended
  • Bezładny.

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

Ten parametr został wprowadzony w programie Windows PowerShell 3.0.

Typ:SwitchParameter
Position:Named
Domyślna wartość:False
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych: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żna wpisać jeden lub więcej identyfikatorów rozdzielonych przecinkami. Aby znaleźć identyfikator zadania, użyj polecenia Get-Job.

Typ:Int32[]
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych: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 .

Typ:Guid[]
Position:0
Domyślna wartość:All instances
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych: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ć obiekt zadania do Receive-Jobobiektu .

Typ:Job[]
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych: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.

Typ:SwitchParameter
Position:Named
Domyślna wartość:False
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Location

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

Typ:String[]
Position:1
Domyślna wartość:All locations
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Name

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

Typ:String[]
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych:True

-NoRecurse

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

Typ:SwitchParameter
Position:Named
Domyślna wartość:False
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych: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ą pssession lub polecenie, które pobiera psSession, takie jak Get-PSSession polecenie.

Typ:PSSession[]
Position:1
Domyślna wartość:All sessions
Wymagane:False
Akceptowanie danych wejściowych potoku:True
Akceptowanie symboli wieloznacznych: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
  • Zatrzymana
  • 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 programie Windows PowerShell 3.0.

Typ:SwitchParameter
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-WriteEvents

Wskazuje, że to polecenie cmdlet zgłasza zmiany stanu 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 programie Windows PowerShell 3.0.

Typ:SwitchParameter
Position:Named
Domyślna wartość:False
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych: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 programie Windows PowerShell 3.0.

Typ:SwitchParameter
Position:Named
Domyślna wartość:False
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

Dane wejściowe

Job

Do tego polecenia cmdlet można przekazać obiekty zadań potokowych.

Dane wyjściowe

PSObject

To polecenie cmdlet zwraca wyniki poleceń w zadaniu.

Uwagi

Program PowerShell zawiera następujące aliasy dla programu Receive-Job:

  • Wszystkie platformy:
    • rcjb