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 van PowerShell-achtergrondtaken op, zoals 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 geen resultaten. Met deze methode kunt u blijven werken in de sessie 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.

Taakresultaten worden standaard verwijderd uit het systeem 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 worden ook de resultaten opgehaald van aangepaste taaktypen, zoals werkstroomtaken en exemplaren van geplande taken. Receive-Job Als u de resultaten van een aangepast taaktype wilt ophalen, importeert u de module die het aangepaste taaktype ondersteunt in de sessie voordat er een Receive-Job opdracht wordt uitgevoerd, hetzij 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

Met deze opdrachten wordt de taakparameter gebruikt 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. Hierbij wordt de taakparameter 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 in de $job variabele opgeslagen en wordt de taak naar de Receive-Job cmdlet gepijpt. De -Keep parameter wordt ook gebruikt om alle geaggregeerde stroomgegevens opnieuw te laten ophalen na de eerste weergave.

Voorbeeld 3: Resultaten van verschillende achtergrondtaken ophalen

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

Wanneer u AsJob gebruikt, retourneert PowerShell ook éé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 van achtergrondtaken kunt uitvoeren op drie externe computers. In tegenstelling tot het vorige voorbeeld, begon het gebruik Invoke-Command om de Start-Job opdracht uit te voeren drie onafhankelijke taken op elk van de drie computers. Als gevolg hiervan heeft de opdracht drie taakobjecten geretourneerd die drie taken vertegenwoordigen die lokaal worden uitgevoerd op drie verschillende computers.

Voorbeeld 5: Onderliggende taken openen

De -Keep parameter behoudt de status van de geaggregeerde streams van een taak, zodat deze opnieuw kan worden bekeken. 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 nog steeds de afzonderlijke gegevensstromen bereiken via het taakobject en 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 heeft geretourneerd. 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 exemplaren 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 van namen van computers.

Deze parameter selecteert een van 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. De wachtparameter van Receive-Job retourneert standaard of beëindigt de wachttijd wanneer taken een van de volgende statussen hebben:

  • Voltooid
  • Mislukt
  • Gestopt
  • Onderbroken
  • Verbroken.

De parameter Force is alleen geldig wanneer de wachtparameter 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 van taken met de opgegeven id's opgehaald.

De id is een geheel getal dat de taak in de huidige sessie uniek identificeert. Het is gemakkelijker te onthouden en te typen dan de exemplaar-id, maar is alleen uniek in de huidige sessie. U kunt een of meer id's typen, gescheiden door komma's. Als u de id van een taak wilt vinden, gebruikt u 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 de Get-Job 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 de resultaten worden opgehaald.

Voer een variabele in die de taak of een opdracht bevat die de taak ophaalt. U kunt ook een taakobject doorsluisen 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 ze hebt ontvangen. Geaggregeerde stroomgegevens worden standaard gewist nadat ze zijn bekeken.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 van locaties. 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 van 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. Receive-Job Standaard worden 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 of een opdracht bevat 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. Receive-Job Standaard worden de beschikbare resultaten onmiddellijk geretourneerd.

De wachtparameter wacht standaard totdat de taak een van de volgende statussen heeft:

  • Voltooid
  • Mislukt
  • Gestopt
  • Onderbroken
  • Verbroken.

Als u de parameter Wachten wilt om door te gaan met wachten als de taakstatus is onderbroken of verbroken, 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 met deze cmdlet wijzigingen in de taakstatus worden gerapporteerd terwijl wordt gewacht tot de taak is voltooid.

Deze parameter is alleen geldig wanneer de wachtparameter 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 met deze cmdlet het taakobject wordt geretourneerd, gevolgd door de resultaten.

Deze parameter is alleen geldig wanneer de wachtparameter 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 doorsluisen naar deze cmdlet.

Uitvoerwaarden

PSObject

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