Receive-Job
Ruft die Ergebnisse der PowerShell-Hintergrundaufträge in der aktuellen Sitzung ab.
Syntax
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>]
Beschreibung
Das Receive-Job
Cmdlet ruft die Ergebnisse von PowerShell-Hintergrundaufträgen ab, z. B. solche, die mithilfe des Start-Job
Cmdlets oder des AsJob-Parameters eines beliebigen Cmdlets gestartet wurden.
Sie können die Ergebnisse aller Aufträge abrufen oder Aufträge nach Name, ID, Instanz-ID, Computername, Speicherort oder Sitzung oder durch Senden eines Auftragsobjekts identifizieren.
Wenn Sie einen PowerShell-Hintergrundauftrag starten, wird der Auftrag gestartet, aber die Ergebnisse werden nicht sofort angezeigt. Stattdessen gibt der Befehl ein Objekt zurück, das den Hintergrundauftrag darstellt. Das Auftragsobjekt enthält nützliche Informationen zum Auftrag, jedoch nicht die Ergebnisse. Mit dieser Methode können Sie weiterhin in der Sitzung arbeiten, während der Auftrag ausgeführt wird. Weitere Informationen zu Hintergrundaufträgen in PowerShell finden Sie unter about_Jobs.
Das Receive-Job
Cmdlet ruft die Ergebnisse ab, die zum Zeitpunkt der Übermittlung des Receive-Job
Befehls generiert wurden.
Wenn die Ergebnisse noch nicht vollständig sind, können Sie zusätzliche Receive-Job
Befehle ausführen, um die verbleibenden Ergebnisse zu erhalten.
Standardmäßig werden die Auftragsergebnisse aus dem System gelöscht, nachdem Sie sie erhalten haben, Sie können jedoch den Keep-Parameter verwenden, um die Ergebnisse zu speichern, damit Sie sie erneut empfangen können.
Um die Auftragsergebnisse zu löschen, führen Sie den Receive-Job
Befehl ohne den Parameter Keep erneut aus, schließen Sie die Sitzung, oder verwenden Sie das Remove-Job
Cmdlet, um den Auftrag aus der Sitzung zu löschen.
Ab Windows PowerShell 3.0 Receive-Job
werden auch die Ergebnisse benutzerdefinierter Auftragstypen abgerufen, z. B. Workflowaufträge und Instanzen geplanter Aufträge.
Um das Abrufen der Ergebnisse durch einen benutzerdefinierten Auftragstyp zu aktivieren Receive-Job
, importieren Sie das Modul, das den benutzerdefinierten Auftragstyp unterstützt, in die Sitzung, bevor ein Receive-Job
Befehl ausgeführt wird, entweder mithilfe des Import-Module
Cmdlets oder mithilfe eines Cmdlets im Modul.
Informationen zu einem bestimmten benutzerdefinierten Auftragstyp finden Sie in der Dokumentation der Funktion „Benutzerdefinierte Auftragstypen“.
Beispiele
Beispiel 1: Abrufen von Ergebnissen für einen bestimmten Auftrag
$job = Start-Job -ScriptBlock {Get-Process}
Receive-Job -Job $job
Diese Befehle verwenden den Job-Parameter von Receive-Job
, um die Ergebnisse eines bestimmten Auftrags abzurufen.
Der erste Befehl startet einen Auftrag mit Start-Job
und speichert das Auftragsobjekt in der $job
Variablen.
Der zweite Befehl verwendet das Receive-Job
Cmdlet, um die Ergebnisse des Auftrags abzurufen.
Mit dem Job-Parameter wird der Auftrag angegeben.
Beispiel 2: Verwenden des Keep-Parameters
$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
In diesem Beispiel wird ein Auftrag in der $job
Variablen gespeichert, und der Auftrag wird an das Receive-Job
Cmdlet weitergeleitet. Der -Keep
Parameter wird auch verwendet, um zu ermöglichen, dass alle aggregierten Datenstromdaten nach der ersten Ansicht erneut abgerufen werden.
Beispiel 3: Abrufen von Ergebnissen mehrerer Hintergrundaufträge
Wenn Sie den AsJob-Parameter von Invoke-Command
verwenden, um einen Auftrag zu starten, wird das Auftragsobjekt auf dem lokalen Computer erstellt, obwohl der Auftrag auf den Remotecomputern ausgeführt wird.
Folglich verwenden Sie lokale Befehle, um den Auftrag zu verwalten.
Wenn Sie AsJob verwenden, gibt PowerShell außerdem ein Auftragsobjekt zurück, das einen untergeordneten Auftrag für jeden gestarteten Auftrag enthält. In diesem Fall enthält das Auftragsobjekt drei untergeordnete Aufträge, einen für jeden Auftrag auf jedem Remotecomputer.
# 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
Beispiel 4: Abrufen von Ergebnissen von Hintergrundaufträgen auf mehreren Remotecomputern
# 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
Dieses Beispiel zeigt, wie Sie die Ergebnisse der Hintergrundaufträge abrufen können, die auf drei Computern ausgeführt werden.
Im Gegensatz zum vorherigen Beispiel Invoke-Command
wurden mit zum Ausführen des Start-Job
Befehls drei unabhängige Aufträge auf jedem der drei Computer gestartet. Daher gibt der Befehl drei Auftragsobjekte zurück, die die drei Aufträge darstellen, die lokal auf drei verschiedenen Computern ausgeführt werden.
Hinweis
Im letzten Befehl, da $j
eine lokale Variable ist, verwendet der Skriptblock den Using-Bereichsmodifizierer, um die $j
Variable zu identifizieren. Weitere Informationen zum Verwenden des Bereichsmodifizierers finden Sie unter about_Remote_Variables.
Beispiel 5: Zugreifen auf untergeordnete Aufträge
Der -Keep
Parameter behält den Zustand der aggregierten Datenströme eines Auftrags bei, sodass er erneut angezeigt werden kann. Ohne diesen Parameter werden alle aggregierten Datenstromdaten gelöscht, wenn der Auftrag empfangen wird. Weitere Informationen finden Sie unter about_Job_Details
Hinweis
Die aggregierten Streams enthalten die Streams aller untergeordneten Aufträge. Sie können die einzelnen Datenströme weiterhin über das Auftragsobjekt und untergeordnete Auftragsobjekte erreichen.
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
Parameter
-AutoRemoveJob
Gibt an, dass dieses Cmdlet den Auftrag löscht, nachdem die Auftragsergebnisse zurückgegeben wurden.
Wenn der Auftrag mehr Ergebnisse aufweist, wird der Auftrag weiterhin gelöscht, aber Receive-Job
es wird eine Meldung angezeigt.
Dieser Parameter kann nur für benutzerdefinierte Auftragstypen verwendet werden. Er wurde für Instanzen von Auftragstypen entwickelt, die den Auftrag oder den Typ außerhalb der Sitzung speichern, z. B. Instanzen von geplanten Aufträgen.
Dieser Parameter kann nicht ohne den Wait-Parameter verwendet werden.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ComputerName
Gibt ein Array von Namen von Computern an.
Mit diesem Parameter wird unter den Auftragsergebnissen ausgewählt, die auf dem lokalen Computer gespeichert sind.
Es werden keine Daten für Aufträge abgerufen, die auf Remotecomputern ausgeführt werden.
Um Auftragsergebnisse abzurufen, die auf Remotecomputern gespeichert sind, verwenden Sie das Invoke-Command
Cmdlet, um einen Receive-Job
Befehl remote auszuführen.
Type: | String[] |
Aliases: | Cn |
Position: | 1 |
Default value: | All computers available |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | True |
-Force
Gibt an, dass dieses Cmdlet weiterhin wartet, wenn Sich Aufträge im Zustand Angehalten oder Getrennt befinden. Standardmäßig gibt der Wait-Parameter von Receive-Job
den Wartevorgang zurück oder beendet den Wartevorgang, wenn sich Aufträge in einem der folgenden Zustände befinden:
- Abgeschlossen
- Fehler
- Beendet
- Ausgesetzt
- Getrennt
Der Force-Parameter ist nur gültig, wenn der Wait-Parameter ebenfalls im Befehl verwendet wird.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Id
Gibt ein Array von IDs an. Dieses Cmdlet ruft die Ergebnisse von Aufträgen mit den angegebenen IDs ab.
Die ID ist eine ganze Zahl, die den Auftrag in der aktuellen Sitzung eindeutig identifiziert.
Es ist einfacher zu merken und einzugeben als die instance-ID, aber sie ist nur in der aktuellen Sitzung eindeutig. Sie können eine oder mehrere IDs durch Kommas getrennt eingeben.
Verwenden Sie , um die ID eines Auftrags zu ermitteln Get-Job
.
Type: | Int32[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-InstanceId
Gibt ein Array von instance-IDs an. Dieses Cmdlet ruft die Ergebnisse von Aufträgen mit den angegebenen instance-IDs ab.
Eine Instanz-ID ist eine GUID, die den Auftrag auf dem Computer eindeutig identifiziert.
Verwenden Sie Get-Job
das Cmdlet, um die instance-ID eines Auftrags zu ermitteln.
Type: | Guid[] |
Position: | 0 |
Default value: | All instances |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Job
Gibt den Auftrag an, für den Ergebnisse abgerufen werden.
Geben Sie eine Variable ein, die den Auftrag enthält, oder geben Sie einen Befehl ein, mit dem das Objekt abgerufen wird.
Sie können auch ein Auftragsobjekt an übergeben Receive-Job
.
Type: | Job[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Keep
Gibt an, dass dieses Cmdlet die aggregierten Datenstromdaten im System speichert, auch wenn Sie sie empfangen haben. Standardmäßig werden aggregierte Datenstromdaten gelöscht, nachdem sie mit Receive-Job
angezeigt wurden.
Wenn Sie die Sitzung schließen oder den Auftrag mit dem Remove-Job
Cmdlet entfernen, werden auch aggregierte Datenstromdaten gelöscht.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Location
Gibt ein Array von Speicherorten an. Dieses Cmdlet ruft nur die Ergebnisse von Aufträgen an den angegebenen Speicherorten ab.
Type: | String[] |
Position: | 1 |
Default value: | All locations |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Name
Gibt ein Array von Anzeigenamen an. Dieses Cmdlet ruft die Ergebnisse von Aufträgen ab, die die angegebenen Namen aufweisen. Platzhalterzeichen werden unterstützt.
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | True |
-NoRecurse
Gibt an, dass dieses Cmdlet nur Ergebnisse aus dem angegebenen Auftrag abruft.
Ruft standardmäßig Receive-Job
auch die Ergebnisse aller untergeordneten Aufträge des angegebenen Auftrags ab.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Session
Gibt ein Array von Sitzungen an.
Dieses Cmdlet ruft die Ergebnisse von Aufträgen ab, die in der angegebenen PowerShell-Sitzung (PSSession) ausgeführt wurden.
Geben Sie eine Variable ein, die die PSSession enthält, oder einen Befehl, der die PSSession abruft, z. B. einen Get-PSSession
Befehl.
Type: | PSSession[] |
Position: | 1 |
Default value: | All sessions |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Wait
Gibt an, dass dieses Cmdlet die Eingabeaufforderung unterdrückt, bis alle Auftragsergebnisse empfangen werden.
Standardmäßig Receive-Job
werden die verfügbaren Ergebnisse sofort zurückgegeben.
Standardmäßig wartet der Wait-Parameter, bis der Auftrag sich in einem der folgenden Zustände befindet:
- Abgeschlossen
- Fehler
- Beendet
- Ausgesetzt
- Getrennt
Verwenden Sie den ParameterForce zusammen mit dem Wait-Parameter zusammen mit dem Wait-Parameter , um das Warten fortzusetzen, wenn der Auftragsstatus Angehalten oder Getrennt lautet.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WriteEvents
Gibt an, dass dieses Cmdlet Änderungen im Auftragszustand meldet, während es auf den Abschluss des Auftrags wartet.
Dieser Parameter ist nur gültig, wenn der Wait-Parameter im Befehl verwendet wird und der Keep-Parameter weggelassen wird.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WriteJobInResults
Gibt an, dass dieses Cmdlet das Auftragsobjekt gefolgt von den Ergebnissen zurückgibt.
Dieser Parameter ist nur gültig, wenn der Wait-Parameter im Befehl verwendet wird und der Keep-Parameter weggelassen wird.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Eingaben
Sie können Auftragsobjekte an dieses Cmdlet übergeben.
Ausgaben
PSObject
Dieses Cmdlet gibt die Ergebnisse der Befehle im Auftrag zurück.