Receive-Job
Hiermee haalt u de resultaten op van de PowerShell-achtergrondtaken in de huidige sessie.
Syntaxis
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 in de sessie blijven werken terwijl de taak wordt uitgevoerd. Zie about_Jobsvoor 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 Behouden gebruiken om de resultaten op te slaan, zodat u ze opnieuw kunt ontvangen.
Als u de taakresultaten wilt verwijderen, voert u de opdracht Receive-Job
opnieuw uit zonder de parameter behouden, sluit u de sessie of gebruikt u de Remove-Job
cmdlet om de taak uit de sessie te verwijderen.
Vanaf Windows PowerShell 3.0 krijgt Receive-Job
ook de resultaten van aangepaste taaktypen, zoals werkstroomtaken en exemplaren van geplande taken.
Als u Receive-Job
wilt inschakelen om de resultaten een aangepast taaktype op te halen, importeert u de module die het aangepaste taaktype ondersteunt in de sessie voordat u een Receive-Job
opdracht uitvoert, 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 aangepaste taaktypen voor informatie over een bepaald type aangepaste taak.
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 variabele $job
.
De tweede opdracht gebruikt de Receive-Job
cmdlet om de resultaten van de taak op te halen.
Hierbij wordt de parameter Job 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 variabele $job
en wordt de taak door de Receive-Job
cmdlet uitgevoerd. De parameter -Keep
wordt ook gebruikt om toe te staan dat alle geaggregeerde stroomgegevens na de eerste weergave opnieuw worden opgehaald.
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, ook al wordt de taak uitgevoerd op de externe computers.
Als gevolg hiervan gebruikt u lokale opdrachten om de taak te beheren.
Wanneer u AsJobgebruikt, 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 job outputs the ComputerName of each server.
# Save the job objects in the $j variable.
$j = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$env:COMPUTERNAME}}
# 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 Job1 Completed True Localhost $env:COMPUTERNAME
2 Job2 Completed True Localhost $env:COMPUTERNAME
3 Job3 Completed True Localhost $env:COMPUTERNAME
# 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 -Job $Using:j}
Server01
Server02
Server03
In dit voorbeeld ziet u hoe u de resultaten van achtergrondtaken kunt uitvoeren op drie externe computers.
In tegenstelling tot het vorige voorbeeld, heeft het gebruik van Invoke-Command
om de opdracht Start-Job
uit te voeren, daadwerkelijk 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 worden uitgevoerd op drie verschillende computers.
Notitie
In de laatste opdracht, omdat $j
een lokale variabele is, gebruikt het scriptblok de Met behulp van bereikaanpassing om de $j
variabele te identificeren. Zie about_Remote_Variablesvoor meer informatie over de Het gebruik van bereikaanpassing.
Voorbeeld 5: Onderliggende taken openen
De parameter -Keep
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 streams 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
een bericht weergeeft.
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 |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-ComputerName
Hiermee geeft u een matrix van 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 cmdlet Invoke-Command
om een Receive-Job
opdracht op afstand uit te voeren.
Type: | String[] |
Aliassen: | Cn |
Position: | 1 |
Default value: | All computers available |
Vereist: | False |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | True |
-Force
Geeft aan dat deze cmdlet blijft wachten als taken de status onderbroken of verbroken hebben. De parameter Wait van Receive-Job
retourneert standaard of beëindigt de wachttijd wanneer taken een van de volgende statussen hebben:
- Volbracht
- Mislukt
- Gestopt
- Latent
- Verbroken.
De parameter Forceren is alleen geldig wanneer de parameter Wait ook in de opdracht wordt gebruikt.
Deze parameter is geïntroduceerd in Windows PowerShell 3.0.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | 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 het is alleen uniek in de huidige sessie. U kunt een of meer id's typen, gescheiden door komma's.
Gebruik Get-Job
om de id van een taak te vinden.
Type: | Int32[] |
Position: | 0 |
Default value: | None |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-InstanceId
Hiermee geeft u een matrix van exemplaar-id's. Met deze cmdlet worden de resultaten van taken met de opgegeven exemplaar-id's opgehaald.
Een exemplaar-id is een GUID waarmee de taak op de computer uniek wordt geïdentificeerd.
Gebruik de Get-Job
-cmdlet om de exemplaar-id van een taak te vinden.
Type: | Guid[] |
Position: | 0 |
Default value: | All instances |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-Job
Hiermee geeft u de taak waarvoor 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 |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-Keep
Geeft aan dat met deze cmdlet de geaggregeerde stroomgegevens in het systeem worden opgeslagen, zelfs nadat u ze hebt ontvangen. Geaggregeerde streamgegevens worden standaard gewist nadat ze zijn bekeken met Receive-Job
.
Als u de sessie sluit of de taak verwijdert met de Remove-Job
cmdlet, worden ook geaggregeerde streamgegevens verwijderd.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | 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 |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | 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 |
Vereist: | True |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | True |
-NoRecurse
Geeft aan dat deze cmdlet alleen resultaten van de opgegeven taak ophaalt.
Standaard haalt Receive-Job
ook de resultaten op van alle onderliggende taken van de opgegeven taak.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | 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 waarmee de PSSession-wordt ophaalt, zoals een Get-PSSession
opdracht.
Type: | PSSession[] |
Position: | 1 |
Default value: | All sessions |
Vereist: | False |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-Wait
Geeft aan dat deze cmdlet de opdrachtprompt onderdrukt totdat alle taakresultaten zijn ontvangen.
Standaard retourneert Receive-Job
onmiddellijk de beschikbare resultaten.
De parameter Wait standaard wacht totdat de taak een van de volgende statussen heeft:
- Volbracht
- Mislukt
- Gestopt
- Latent
- Verbroken.
Als u de parameter Wait 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 |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-WriteEvents
Geeft aan dat deze cmdlet wijzigingen in de taakstatus rapporteert terwijl deze wacht 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 |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | 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 |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
Invoerwaarden
U kunt taakobjecten doorsluisen naar deze cmdlet.
Uitvoerwaarden
PSObject
Deze cmdlet retourneert de resultaten van de opdrachten in de taak.