Receive-Job
Ruft die Ergebnisse der Windows PowerShell-Hintergrundaufträge in der aktuellen Sitzung ab.
Syntax
Receive-Job [-Job] <Job[]> [[-ComputerName] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]
Receive-Job [[-InstanceId] <Guid[]>] [-Keep] [-NoRecurse] [<CommonParameters>]
Receive-Job [-Job] <Job[]> [[-Location] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]
Receive-Job [[-Name] <string[]>] [-Keep] [-NoRecurse] [<CommonParameters>]
Receive-Job [-Job] <Job[]> [[-Session] <PSSession[]>] [-Keep] [-NoRecurse] [<CommonParameters>]
Receive-Job [-Id] <Int32[]> [-Keep] [-NoRecurse] [<CommonParameters>]
Beschreibung
Das Cmdlet "Receive-Job" ruft die Ergebnisse der Windows PowerShell-Hintergrundaufträge ab. Mit Receive-Job können Sie die Ergebnisse von Aufträgen abrufen, die mit dem Cmdlet "Start-Job" oder mit dem AsJob-Parameter eines beliebigen Cmdlets gestartet wurden. Sie können die Ergebnisse aller Aufträge abrufen, oder Sie können Aufträge anhand von Name, ID, Instanz-ID, Computername, Speicherort oder Sitzung sowie durch Senden eines Auftragsobjekts identifizieren.
Wenn Sie einen Windows PowerShell-Hintergrundauftrag starten, wird der Auftrag gestartet, die Ergebnisse werden jedoch nicht sofort angezeigt. Stattdessen wird ein Objekt vom Befehl zurückgegeben, das den Hintergrundauftrag darstellt. Das Auftragsobjekt enthält nützliche Informationen über den Auftrag, jedoch keine Auftragsergebnisse. Mit dieser Methode können Sie während der Auftragsausführung weiterhin in der Sitzung arbeiten. Weitere Informationen über Hintergrundaufträge in Windows PowerShell finden Sie unter "about_Jobs".
Um die Befehlsergebnisse abzurufen, verwenden Sie das Cmdlet "Receive-Job". Mit Receive-Job werden die Ergebnisse abgerufen, die bis zum Senden des Befehls "Receive-Job" generiert wurden. Wenn die Ergebnisse noch nicht vollständig sind, können Sie zusätzliche Receive-Job-Befehle ausführen, um die verbleibenden Ergebnisse abzurufen.
Auftragsergebnisse werden standardmäßig aus dem System gelöscht, nachdem Sie sie empfangen haben. Sie können die Ergebnisse jedoch mit dem Keep-Parameter speichern, um diese erneut empfangen zu können. Empfangen Sie die Ergebnisse erneut (ohne Keep-Parameter), um die Auftragsergebnisse zu löschen, und schließen Sie die Sitzung, oder löschen Sie den Auftrag mit dem Cmdlet "Remove-Job" aus der Sitzung.
Parameter
-ComputerName <string[]>
Ruft die Ergebnisse von Aufträgen ab, die auf den angegebenen Computern ausgeführt wurden. Geben Sie die Computernamen ein. Standardmäßig sind dies alle Aufträge in der aktuellen Sitzung.
Mit diesem Parameter wird eine Auswahl aus den Auftragsergebnissen getroffen, die auf dem lokalen Computer gespeichert werden. Daten von Remotecomputern werden nicht abgerufen. Führen Sie mit dem Cmdlet "Invoke-Command" einen Receive-Job-Befehl remote aus, um Auftragsergebnisse abzurufen, die auf Remotecomputern gespeichert werden.
Erforderlich? |
false |
Position? |
2 |
Standardwert |
|
Pipelineeingaben akzeptieren? |
true (ByPropertyName) |
Platzhalterzeichen akzeptieren? |
false |
-Id <Int32[]>
Ruft die Ergebnisse von Aufträgen mit den angegebenen IDs ab. Standardmäßig sind dies alle Aufträge in der aktuellen Sitzung.
Die ID ist eine ganze Zahl, die den Auftrag in der aktuellen Sitzung eindeutig identifiziert. Sie lässt sich leichter merken und eingeben als die Instanz-ID, ist jedoch nur in der aktuellen Sitzung eindeutig. Sie können eine oder mehrere IDs eingeben (durch Trennzeichen getrennt). Um die ID eines Auftrags zu suchen, geben Sie "Get-Job" ohne Parameter ein.
Erforderlich? |
true |
Position? |
1 |
Standardwert |
|
Pipelineeingaben akzeptieren? |
true (ByPropertyName) |
Platzhalterzeichen akzeptieren? |
false |
-InstanceId <Guid[]>
Ruft die Ergebnisse von Aufträgen mit den angegebenen Instanz-IDs ab. Standardmäßig sind dies alle Aufträge in der aktuellen Sitzung.
Eine Instanz-ID ist ein GUID, der den Auftrag auf dem Computer eindeutig identifiziert. Mit dem Cmdlet "Get-Job" können Sie die Instanz-ID eines Auftrags suchen.
Erforderlich? |
false |
Position? |
1 |
Standardwert |
|
Pipelineeingaben akzeptieren? |
true (ByPropertyName) |
Platzhalterzeichen akzeptieren? |
false |
-Job <Job[]>
Gibt den Auftrag an, für den Ergebnisse abgerufen werden. Dieser Parameter ist in einem Receive-Job-Befehl erforderlich. Geben Sie eine Variable mit dem Auftrag oder einen Befehl zum Abrufen des Auftrags ein. Sie können auch ein Auftragsobjekt über die Pipeline an Receive-Job übergeben.
Erforderlich? |
true |
Position? |
1 |
Standardwert |
|
Pipelineeingaben akzeptieren? |
true (ByValue, ByPropertyName) |
Platzhalterzeichen akzeptieren? |
false |
-Keep
Speichert die Auftragsergebnisse im System, auch nachdem Sie sie empfangen haben. Standardmäßig werden die Auftragsergebnisse gelöscht, wenn sie abgerufen werden.
Um die Ergebnisse zu löschen, verwenden Sie Receive-Job, um die Ergebnisse ohne den Keep-Parameter erneut zu empfangen, schließen Sie die Sitzung, oder löschen Sie den Auftrag mithilfe des Cmdlets "Remove-Job" aus der Sitzung.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-Location <string[]>
Ruft nur die Ergebnisse von Aufträgen mit dem angegebenen Speicherort ab. Standardmäßig sind dies alle Aufträge in der aktuellen Sitzung.
Erforderlich? |
false |
Position? |
2 |
Standardwert |
|
Pipelineeingaben akzeptieren? |
true (ByPropertyName) |
Platzhalterzeichen akzeptieren? |
false |
-Name <string[]>
Ruft die Ergebnisse von Aufträgen mit dem angegebenen Anzeigenamen ab. Standardmäßig sind dies alle Aufträge in der aktuellen Sitzung.
Erforderlich? |
false |
Position? |
1 |
Standardwert |
|
Pipelineeingaben akzeptieren? |
true (ByPropertyName) |
Platzhalterzeichen akzeptieren? |
false |
-NoRecurse
Ruft nur Ergebnisse aus dem angegebenen Auftrag ab. Standardmäßig werden mit Receive-Job auch die Ergebnisse aller untergeordneten Aufträge des angegebenen Auftrags abgerufen.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-Session <PSSession[]>
Ruft die Ergebnisse von Aufträgen ab, die in der angegebenen Windows PowerShell-Sitzung (PSSession) ausgeführt wurden. Geben Sie eine Variable ein, die die PSSession enthält, oder einen Befehl, mit dem die PSSession abgerufen wird, beispielsweise den Befehl "Get-PSSession". Standardmäßig sind dies alle Aufträge in der aktuellen Sitzung.
Erforderlich? |
false |
Position? |
2 |
Standardwert |
|
Pipelineeingaben akzeptieren? |
true (ByPropertyName) |
Platzhalterzeichen akzeptieren? |
false |
<CommonParameters>
Dieses Cmdlet unterstützt die folgenden allgemeinen Parameter: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer und -OutVariable. Weitere Informationen finden Sie unter about_Commonparameters.
Eingaben und Ausgaben
Der Eingabetyp ist der Typ der Objekte, die über die Pipeline an das Cmdlet übergeben werden können. Der Rückgabetyp ist der Typ der Objekte, die das Cmdlet zurückgibt.
Eingaben |
System.Management.Automation.Job Sie können Objekte über die Pipeline an Receive-Job übergeben. |
Ausgaben |
PSObject Das Cmdlet "Receive-Job" gibt die Ergebnisse der im Auftrag enthaltenen Befehle zurück. |
Beispiel 1
C:\PS>$job = start-job -scriptblock {get-process}
C:\PS> receive-job -job $job
Beschreibung
-----------
In diesen Befehlen werden die Ergebnisse eines bestimmten Auftrags mit dem Job-Parameter abgerufen. Im ersten Befehl wird mit dem Cmdlet "Start-Job" ein Auftrag gestartet, um den Befehl "Get-Process" auszuführen. Das resultierende Auftragsobjekt wird vom Befehl mit dem Zuweisungsoperator (=) in der Variablen "$job" gespeichert.
Im zweiten Befehl wird das Cmdlet "Receive-Job" verwendet, um die Ergebnisse des Auftrags abzurufen. Der Auftrag wird mit dem Job-Parameter angegeben.
Beispiel 2
C:\PS>$job = start-job -scriptblock {get-process}
C:\PS> $job | receive-job
Beschreibung
-----------
Dieses Beispiel unterscheidet sich vom Beispiel 2 nur darin, dass das Auftragsobjekt vom Befehl mit einem Pipelineoperator (|) an Receive-Job gesendet wird. Aus diesem Grund ist kein Job-Parameter zur Angabe des Auftrags für den Befehl erforderlich.
Beispiel 3
C:\PS>$j = invoke-command -computername Server01, Server02, Server03 -scriptblock {get-service} -AsJob
C:\PS> $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
C:\PS> 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
Beschreibung
-----------
In diesen Befehlen werden die Ergebnisse eines von mehreren Hintergrundaufträgen, die auf Remotecomputern ausgeführt werden, mit dem Name-Parameter von Receive-Job abgerufen.
Im ersten Befehl wird ein Hintergrundauftrag, der auf drei Remotecomputern den Befehl "Get-Service" ausführt, mit dem Cmdlet "Invoke-Command" gestartet. Bei dem Befehl wird der Befehl mithilfe des AsJob-Parameters als Hintergrundauftrag ausgeführt. Mit dem Befehl wird das resultierende Auftragsobjekt in der Variablen "$j" gespeichert.
Wenn Sie einen Auftrag mit dem AsJob-Parameters von Invoke-Command starten, wird das Auftragsobjekt auch dann auf dem lokalen Computer erstellt, wenn der Auftrag auf den Remotecomputern ausgeführt wird. Der Auftrag wird daher mit lokalen Befehlen verwaltet.
Bei Verwendung von AsJob wird außerdem ein Auftragsobjekt von Windows PowerShell zurückgegeben, 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.
Im zweiten Befehl wird mit der DOT-Methode der Wert der ChildJobs-Eigenschaft des Auftragsobjekts in $j angezeigt. Anhand der Anzeige wird deutlich, dass drei untergeordnete Aufträge vom Befehl erstellt wurden, jeweils ein Auftrag für jeden Remotecomputer.
Im dritten Befehl werden die Ergebnisse des untergeordneten Auftrags "Job3" mit dem Cmdlet "Receive-Job" abgerufen, der auf dem Computer "Server02" ausgeführt wurde. Der Name des untergeordneten Auftrags wird mit dem Name-Parameter angegeben, und die Auftragsergebnisse werden auch nach Empfang mit dem Name-Parameter gespeichert.
Beispiel 4
C:\PS>$s = new-pssession -computername Server01, Server02, Server03
C:\PS> $j = invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog -logname system}}
C:\PS> $j
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 Job1 Completed True Localhost get-eventlog system
2 Job2 Completed True Localhost get-eventlog system
3 Job3 Completed True Localhost get-eventlog system
C:\PS> $results = invoke-command -session $s -scriptblock {param($j) receive-job -job $j} -ArgumentList $j
Beschreibung
-----------
In diesem Beispiel wird gezeigt, wie die Ergebnisse von Hintergrundaufträgen abgerufen werden, die auf Remotecomputern ausgeführt werden.
Im ersten Befehl werden mit dem Cmdlet "New-PSSession" drei PSSessions erstellt, je eine pro angegebenem Server im Befehl. Die PSSessions werden in der Variablen "$s" gespeichert.
Im zweiten Befehl wird mit dem Cmdlet "Invoke-Command" ein Start-Job-Befehl je PSSession in der Variablen "$s"ausgeführt. Der Auftrag führt einen Get-Eventlog-Befehl aus, mit dem die Ereignisse im Systemprotokoll abgerufen werden. Anschließend werden die Ergebnisse in der Variablen "$j" gespeichert.
Da der Befehl "Start-Job" vom Befehl mit Invoke-Command ausgeführt wurde, wurden eigentlich drei unabhängige Aufträge auf jedem der drei Computer gestartet. Daher wurden vom Befehl drei Auftragsobjekte zurückgegeben, die drei Aufträge darstellen, die lokal auf drei verschiedenen Computern ausgeführt werden.
Mit dem dritten Befehl werden die drei Auftragsobjekte in $j angezeigt.
Der vierte Befehl verwendet Invoke-Command, um einen Receive-Job-Befehl in jeder der PSSessions in $s auszuführen und die Ergebnisse in der Variablen "$results" zu speichern.
Da $j eine lokale Variable darstellt, werden die Variablen im Befehl vom Skriptblock mit dem param-Schlüsselwort deklariert, und der Wert von $j wird mit dem ArgumentList-Parameter angegeben.
Siehe auch
Konzepte
about_Jobs
about_Job_Details
about_Remote_Jobs
Start-Job
Get-Job
Wait-Job
Stop-Job
Remove-Job
Invoke-Command