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 cmdlet Receive-Job
pobiera wyniki zadań w tle programu PowerShell, takich jak te uruchomione przy użyciu polecenia cmdlet Start-Job
lub AsJob parametru 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 cmdlet Receive-Job
pobiera wyniki wygenerowane przez czas przesłania polecenia Receive-Job
. Jeśli wyniki nie zostały jeszcze ukończone, możesz uruchomić dodatkowe polecenia Receive-Job
, 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 ponownie polecenie Receive-Job
bez parametru Zachowaj, zamknij sesję lub użyj polecenia cmdlet Remove-Job
, aby usunąć zadanie z sesji.
Począwszy od programu Windows PowerShell 3.0, Receive-Job
również pobiera 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 polecenia Receive-Job
za pomocą polecenia cmdlet Import-Module
lub 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 JobReceive-Job
, aby uzyskać wyniki określonego zadania.
Pierwsze polecenie uruchamia zadanie z Start-Job
i przechowuje obiekt zadania w zmiennej $job
.
Drugie polecenie używa polecenia cmdlet Receive-Job
, aby uzyskać wyniki zadania.
Używa parametru Job w celu określenia zadania.
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 polecenia cmdlet Receive-Job
. Parametr -Keep
służy również do ponownego pobierania wszystkich zagregowanych danych strumienia po pierwszym widoku.
Przykład 3. Pobieranie wyników kilku zadań w tle
Jeśli używasz parametru AsJob Invoke-Command
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 używania AsJobprogram 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ładu przy użyciu Invoke-Command
do uruchomienia polecenia Start-Job
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
Nuta
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ń.
Tego parametru nie można użyć 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 polecenia cmdlet Invoke-Command
, aby zdalnie uruchomić polecenie Receive-Job
.
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 znajdują się w stanie wstrzymane lub rozłączone. Domyślnie parametr Wait zwraca Receive-Job
lub kończy oczekiwanie, gdy zadania znajdują się w jednym z następujących stanów:
- Zakończone
- Nie powiodło się
- Zatrzymany
- Zawieszony
- 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 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 polecenia cmdlet Get-Job
.
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
.
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ą Receive-Job
.
Zamknięcie sesji lub usunięcie zadania za pomocą polecenia cmdlet Remove-Job
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
również pobiera 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, na przykład polecenie Get-PSSession
.
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:
- Zakończone
- Nie powiodło się
- Zatrzymany
- Zawieszony
- Bezładny
Aby skierować parametr Wait, aby kontynuować oczekiwanie, jeśli stan zadania jest zawieszony lub rozłączony, użyj parametru Force wraz 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 Receive-Job
:
- Wszystkie platformy:
rcjb