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-Job
obiektu .
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
Do tego polecenia cmdlet można przekazać obiekty zadań potokowych.
Dane wyjściowe
To polecenie cmdlet zwraca wyniki poleceń w zadaniu.
Uwagi
Program PowerShell zawiera następujące aliasy dla programu Receive-Job
:
- Wszystkie platformy:
rcjb