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-Job
Wait 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
U kunt taakobjecten doorsnijden naar deze cmdlet.
Uitvoerwaarden
PSObject
Deze cmdlet retourneert de resultaten van de opdrachten in de taak.