Freigeben über


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. die, 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 abgeschlossen sind, können Sie zusätzliche Receive-Job Befehle ausführen, um die restlichen 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. Führen Sie zum Löschen der Auftragsergebnisse 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.

Ruft ab Windows PowerShell 3.0 Receive-Job auch die Ergebnisse benutzerdefinierter Auftragstypen ab, z. B. Workflowaufträge und Instanzen geplanter Aufträge. Um das Abrufen der Ergebnisse eines benutzerdefinierten Auftragstyps 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 können.

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.

Außerdem gibt PowerShell bei Verwendung von AsJob 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 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.
$j = Invoke-Command -Session $s -ScriptBlock {​Start-Job -Name $('MyJob-' +$env:COMPUTERNAME) -ScriptBlock {(Get-Date).ToString()​}​}
# 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

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 hat die Verwendung Invoke-Command zum Ausführen des Start-Job Befehls tatsächlich 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.

Beispiel 5: Zugriff 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 die untergeordneten 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 es die Auftragsergebnisse zurückgibt. Wenn der Auftrag weitere 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 die Wartezeit zurück oder beendet die Wartezeit, 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. Um die ID eines Auftrags zu ermitteln, verwenden Sie 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 nachdem Sie sie empfangen haben. Standardmäßig werden aggregierte Streamdaten gelöscht, nachdem sie mit Receive-Jobangezeigt wurden.

Das Schließen der Sitzung oder das Entfernen des Auftrags mit dem Remove-Job Cmdlet löscht auch aggregierte Streamdaten.

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 vom angegebenen Auftrag erhält. 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 werden Receive-Job sofort die verfügbaren Ergebnisse 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 denForce-Parameter zusammen mit dem Wait-Parameter zusammen mit dem Wait-Parameter , um das Warten fortzusetzen, wenn der Auftragsstatus Angehalten oder Getrennt ist.

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 Auftragsstatus meldet, während es wartet, bis der Auftrag abgeschlossen ist.

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

Job

Sie können Auftragsobjekte an dieses Cmdlet weiterleiten.

Ausgaben

PSObject

Dieses Cmdlet gibt die Ergebnisse der Befehle im Auftrag zurück.

Hinweise

PowerShell enthält die folgenden Aliase für Receive-Job:

  • Alle Plattformen:
    • rcjb