Delen via


Receive-Job

Hiermee haalt u de resultaten op van de PowerShell-achtergrondtaken in de huidige sessie.

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>]

Description

De Receive-Job cmdlet haalt de resultaten op van PowerShell-achtergrondtaken, zoals de taken die zijn gestart met behulp van de Start-Job cmdlet of de AsJob-parameter van een cmdlet. U kunt de resultaten van alle taken ophalen of taken identificeren op basis van hun naam, id, exemplaar-id, computernaam, locatie of sessie, of door een taakobject in te dienen.

Wanneer u een PowerShell-achtergrondtaak start, wordt de taak gestart, maar worden de resultaten niet onmiddellijk weergegeven. In plaats daarvan retourneert de opdracht een object dat de achtergrondtaak vertegenwoordigt. Het taakobject bevat nuttige informatie over de taak, maar bevat niet de resultaten. Met deze methode kunt u in de sessie blijven werken terwijl de taak wordt uitgevoerd. Zie about_Jobs voor meer informatie over achtergrondtaken in PowerShell.

De Receive-Job cmdlet haalt de resultaten op die zijn gegenereerd op het moment dat de Receive-Job opdracht wordt verzonden. Als de resultaten nog niet zijn voltooid, kunt u extra Receive-Job opdrachten uitvoeren om de resterende resultaten op te halen.

Standaard worden taakresultaten uit het systeem verwijderd wanneer u ze ontvangt, maar u kunt de parameter Keep gebruiken om de resultaten op te slaan, zodat u ze opnieuw kunt ontvangen. Als u de taakresultaten wilt verwijderen, voert u de Receive-Job opdracht opnieuw uit zonder de parameter Keep , sluit u de sessie of gebruikt u de Remove-Job cmdlet om de taak uit de sessie te verwijderen.

Vanaf Windows PowerShell 3.0 Receive-Job krijgt u ook de resultaten van aangepaste taaktypen, zoals werkstroomtaken en exemplaren van geplande taken. Als u de resultaten van een aangepast taaktype wilt inschakelen Receive-Job , importeert u de module die het aangepaste taaktype ondersteunt in de sessie voordat een Receive-Job opdracht wordt uitgevoerd, met behulp van de Import-Module cmdlet of door een cmdlet in de module te gebruiken of op te halen. Zie de documentatie van de functie aangepast taaktype voor informatie over een bepaald aangepast taaktype.

Voorbeelden

Voorbeeld 1: Resultaten ophalen voor een bepaalde taak

$job = Start-Job -ScriptBlock {Get-Process}
Receive-Job -Job $job

Deze opdrachten gebruiken de parameter Job van Receive-Job om de resultaten van een bepaalde taak op te halen.

Met de eerste opdracht wordt een taak gestart met Start-Job en wordt het taakobject opgeslagen in de $job variabele.

De tweede opdracht gebruikt de Receive-Job cmdlet om de resultaten van de taak op te halen. De taakparameter wordt gebruikt om de taak op te geven.

Voorbeeld 2: de parameter Keep gebruiken

$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 dit voorbeeld wordt een taak opgeslagen in de $job variabele en wordt de taak naar de Receive-Job cmdlet gestaakt. De -Keep parameter wordt ook gebruikt om toe te staan dat alle geaggregeerde stroomgegevens opnieuw worden opgehaald na de eerste weergave.

Voorbeeld 3: Resultaten van verschillende achtergrondtaken ophalen

Wanneer u de parameter AsJob van Invoke-Command gebruikt om een taak te starten, wordt het taakobject gemaakt op de lokale computer, zelfs als de taak wordt uitgevoerd op de externe computers. Als gevolg hiervan gebruikt u lokale opdrachten om de taak te beheren.

Wanneer u AsJob gebruikt, retourneert PowerShell bovendien één taakobject dat een onderliggende taak bevat voor elke taak die is gestart. In dit geval bevat het taakobject drie onderliggende taken, één voor elke taak op elke externe computer.

# 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

Voorbeeld 4: resultaten ophalen van achtergrondtaken op meerdere externe computers

# 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

In dit voorbeeld ziet u hoe u de resultaten kunt ophalen van achtergrondtaken die worden uitgevoerd op drie externe computers. In tegenstelling tot het vorige voorbeeld heeft het gebruik Invoke-Command van om de Start-Job opdracht uit te voeren in feite drie onafhankelijke taken gestart op elk van de drie computers. Als gevolg hiervan heeft de opdracht drie taakobjecten geretourneerd die drie taken vertegenwoordigen die lokaal op drie verschillende computers worden uitgevoerd.

Voorbeeld 5: Toegang tot onderliggende taken

De -Keep parameter behoudt de status van de geaggregeerde streams van een taak, zodat deze opnieuw kan worden weergegeven. Zonder deze parameter worden alle geaggregeerde stroomgegevens gewist wanneer de taak wordt ontvangen. Zie about_Job_Details voor meer informatie

Notitie

De geaggregeerde streams bevatten de stromen van alle onderliggende taken. U kunt de afzonderlijke gegevensstromen nog steeds bereiken via het taakobject en de onderliggende taakobjecten.

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

Parameters

-AutoRemoveJob

Geeft aan dat deze cmdlet de taak verwijdert nadat deze de taakresultaten retourneert. Als de taak meer resultaten heeft, wordt de taak nog steeds verwijderd, maar Receive-Job wordt er een bericht weergegeven.

Deze parameter werkt alleen voor aangepaste taaktypen. Het is ontworpen voor exemplaren van taaktypen die de taak of het type buiten de sessie opslaan, zoals instanties van geplande taken.

Deze parameter kan niet worden gebruikt zonder de parameter Wait .

Deze parameter is geïntroduceerd in Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ComputerName

Hiermee geeft u een matrix met namen van computers.

Deze parameter selecteert uit de taakresultaten die zijn opgeslagen op de lokale computer. Er worden geen gegevens opgehaald voor taken die worden uitgevoerd op externe computers. Als u taakresultaten wilt ophalen die zijn opgeslagen op externe computers, gebruikt u de Invoke-Command cmdlet om een Receive-Job opdracht op afstand uit te voeren.

Type:String[]
Aliases:Cn
Position:1
Default value:All computers available
Required:False
Accept pipeline input:True
Accept wildcard characters:True

-Force

Geeft aan dat deze cmdlet blijft wachten als taken de status Onderbroken of Verbroken hebben. Standaard retourneert of beëindigt de parameter Receive-JobWait de wachttijd wanneer taken een van de volgende statussen hebben:

  • Voltooid
  • Mislukt
  • Gestopt
  • Onderbroken
  • Verbroken.

De parameter Force is alleen geldig wanneer de parameter Wait ook wordt gebruikt in de opdracht.

Deze parameter is geïntroduceerd in Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Id

Hiermee geeft u een matrix van id's. Met deze cmdlet worden de resultaten opgehaald van taken met de opgegeven id's.

De id is een geheel getal dat de taak in de huidige sessie uniek identificeert. Het is gemakkelijker om te onthouden en te typen dan de exemplaar-id, maar deze is alleen uniek in de huidige sessie. U kunt een of meer id's typen, gescheiden door komma's. Gebruik om de id van een taak te vinden Get-Job.

Type:Int32[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-InstanceId

Hiermee geeft u een matrix van exemplaar-id's. Met deze cmdlet worden de resultaten opgehaald van taken met de opgegeven exemplaar-id's.

Een exemplaar-id is een GUID die de taak op de computer uniek identificeert. Gebruik Get-Job de cmdlet om de exemplaar-id van een taak te vinden.

Type:Guid[]
Position:0
Default value:All instances
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Job

Hiermee geeft u de taak waarvoor resultaten worden opgehaald.

Voer een variabele in die de taak bevat of een opdracht die de taak ophaalt. U kunt ook een taakobject doorsnijden naar Receive-Job.

Type:Job[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-Keep

Geeft aan dat met deze cmdlet de geaggregeerde stroomgegevens in het systeem worden opgeslagen, zelfs nadat u deze hebt ontvangen. Geaggregeerde stroomgegevens worden standaard gewist na weergave met Receive-Job.

Als u de sessie sluit of de taak verwijdert met de Remove-Job cmdlet, worden ook geaggregeerde stroomgegevens verwijderd.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Location

Hiermee geeft u een matrix met locaties op. Met deze cmdlet worden alleen de resultaten van taken op de opgegeven locaties opgehaald.

Type:String[]
Position:1
Default value:All locations
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

Hiermee geeft u een matrix met beschrijvende namen. Met deze cmdlet worden de resultaten opgehaald van taken met de opgegeven namen. Jokertekens worden ondersteund.

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-NoRecurse

Geeft aan dat deze cmdlet alleen resultaten krijgt van de opgegeven taak. Standaard worden Receive-Job ook de resultaten opgehaald van alle onderliggende taken van de opgegeven taak.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Session

Hiermee geeft u een matrix van sessies. Met deze cmdlet worden de resultaten opgehaald van taken die zijn uitgevoerd in de opgegeven PowerShell-sessie (PSSession). Voer een variabele in die de PSSession bevat of een opdracht die de PSSession ophaalt, zoals een Get-PSSession opdracht.

Type:PSSession[]
Position:1
Default value:All sessions
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Wait

Geeft aan dat deze cmdlet de opdrachtprompt onderdrukt totdat alle taakresultaten zijn ontvangen. Retourneert standaard Receive-Job onmiddellijk de beschikbare resultaten.

Standaard wacht de parameter Wait totdat de taak een van de volgende statussen heeft:

  • Voltooid
  • Mislukt
  • Gestopt
  • Onderbroken
  • Verbroken.

Als u de parameter Wait wilt laten wachten als de taakstatus Onderbroken of Verbroken is, gebruikt u de parameter Force samen met de parameter Wait .

Deze parameter is geïntroduceerd in Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WriteEvents

Geeft aan dat deze cmdlet wijzigingen in de taakstatus rapporteert terwijl wordt gewacht tot de taak is voltooid.

Deze parameter is alleen geldig wanneer de parameter Wait wordt gebruikt in de opdracht en de parameter Keep wordt weggelaten.

Deze parameter is geïntroduceerd in Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WriteJobInResults

Geeft aan dat deze cmdlet het taakobject retourneert, gevolgd door de resultaten.

Deze parameter is alleen geldig wanneer de parameter Wait wordt gebruikt in de opdracht en de parameter Keep wordt weggelaten.

Deze parameter is geïntroduceerd in Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Invoerwaarden

Job

U kunt taakobjecten doorsnijden naar deze cmdlet.

Uitvoerwaarden

PSObject

Deze cmdlet retourneert de resultaten van de opdrachten in de taak.