Receive-Job
Hämtar resultatet av PowerShell-bakgrundsjobben i den aktuella sessionen.
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
Cmdleten Receive-Job
hämtar resultatet av PowerShell-bakgrundsjobb, till exempel de som startats med hjälp av cmdleten Start-Job
eller asjob-parametern för valfri cmdlet.
Du kan hämta resultatet av alla jobb eller identifiera jobb efter namn, ID, instans-ID, datornamn, plats eller session eller genom att skicka ett jobbobjekt.
När du startar ett PowerShell-bakgrundsjobb startar jobbet, men resultatet visas inte omedelbart. I stället returnerar kommandot ett objekt som representerar bakgrundsjobbet. Jobbobjektet innehåller användbar information om jobbet, men det innehåller inte resultatet. Med den här metoden kan du fortsätta att arbeta i sessionen medan jobbet körs. Mer information om bakgrundsjobb i PowerShell finns i about_Jobs.
Cmdleten Receive-Job
hämtar de resultat som har genererats när Receive-Job
kommandot skickas.
Om resultatet inte är klart ännu kan du köra ytterligare Receive-Job
kommandon för att hämta återstående resultat.
Som standard tas jobbresultaten bort från systemet när du tar emot dem, men du kan använda parametern Behåll för att spara resultaten så att du kan ta emot dem igen.
Om du vill ta bort jobbresultatet Receive-Job
kör du kommandot igen utan parametern Behåll , stänger sessionen eller använder cmdleten Remove-Job
för att ta bort jobbet från sessionen.
Från och med Windows PowerShell 3.0 Receive-Job
får du också resultatet av anpassade jobbtyper, till exempel arbetsflödesjobb och instanser av schemalagda jobb.
Om du vill aktivera Receive-Job
för att få resultatet en anpassad jobbtyp importerar du modulen som stöder den anpassade jobbtypen till sessionen innan den kör ett Receive-Job
kommando, antingen med hjälp av cmdleten Import-Module
eller genom att använda eller hämta en cmdlet i modulen.
Information om en viss anpassad jobbtyp finns i dokumentationen för funktionen för anpassad jobbtyp.
Exempel
Exempel 1: Hämta resultat för ett visst jobb
$job = Start-Job -ScriptBlock {Get-Process}
Receive-Job -Job $job
De här kommandona använder jobbparametern Receive-Job
för för att hämta resultatet av ett visst jobb.
Det första kommandot startar ett jobb med Start-Job
och lagrar jobbobjektet i variabeln $job
.
Det andra kommandot använder cmdleten Receive-Job
för att hämta resultatet av jobbet.
Den använder jobbparametern för att ange jobbet.
Exempel 2: Använd parametern Behåll
$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
Det här exemplet lagrar ett jobb i variabeln $job
och skickar jobbet till cmdleten Receive-Job
. Parametern -Keep
används också för att tillåta att alla aggregerade dataström hämtas igen efter den första vyn.
Exempel 3: Hämta resultat från flera bakgrundsjobb
När du använder AsJob-parameternInvoke-Command
för för att starta ett jobb skapas jobbobjektet på den lokala datorn, även om jobbet körs på fjärrdatorerna.
Därför använder du lokala kommandon för att hantera jobbet.
När du använder AsJob returnerar PowerShell också ett jobbobjekt som innehåller ett underordnat jobb för varje jobb som startades. I det här fallet innehåller jobbobjektet tre underordnade jobb, ett för varje jobb på varje fjärrdator.
# 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
Exempel 4: Hämta resultat av bakgrundsjobb på flera fjärrdatorer
# 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
Det här exemplet visar hur du får resultatet av bakgrundsjobb att köras på tre fjärrdatorer.
Till skillnad från föregående exempel startade användning Invoke-Command
för att köra Start-Job
kommandot faktiskt tre oberoende jobb på var och en av de tre datorerna. Därför returnerade kommandot tre jobbobjekt som representerar tre jobb som körs lokalt på tre olika datorer.
Anteckning
I det senaste kommandot, eftersom $j
det är en lokal variabel, använder skriptblocket modifieraren Using scope ( Använda omfång) för att identifiera variabeln $j
. Mer information om att använda omfångsmodifieraren finns i about_Remote_Variables.
Exempel 5: Åtkomst till underordnade jobb
Parametern -Keep
bevarar tillståndet för aggregerade strömmar för ett jobb så att det kan visas igen. Utan den här parametern raderas alla aggregerade dataström när jobbet tas emot. Mer information finns i about_Job_Details
Anteckning
De aggregerade strömmarna innehåller strömmar för alla underordnade jobb. Du kan fortfarande nå de enskilda dataströmmarna via jobbobjektet och underordnade jobbobjekt.
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
Parametrar
-AutoRemoveJob
Anger att den här cmdleten tar bort jobbet när det returnerar jobbresultatet.
Om jobbet har fler resultat tas jobbet fortfarande bort, men Receive-Job
ett meddelande visas.
Den här parametern fungerar bara på anpassade jobbtyper. Den är utformad för instanser av jobbtyper som sparar jobbet eller typen utanför sessionen, till exempel instanser av schemalagda jobb.
Den här parametern kan inte användas utan parametern Vänta .
Den här parametern introducerades i Windows PowerShell 3.0.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ComputerName
Anger en matris med namn på datorer.
Den här parametern väljer bland jobbresultaten som lagras på den lokala datorn.
Det hämtar inte data för jobb som körs på fjärrdatorer.
Om du vill hämta jobbresultat som lagras på fjärrdatorer använder du cmdleten Invoke-Command
för att fjärrköra ett Receive-Job
kommando.
Type: | String[] |
Aliases: | Cn |
Position: | 1 |
Default value: | All computers available |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | True |
-Force
Anger att den här cmdleten fortsätter att vänta om jobben är i tillståndet Pausad eller Frånkopplad . Som standard returnerar wait-parametern Receive-Job
för returnerar, eller avslutar väntetiden, när jobben är i något av följande tillstånd:
- Slutförd
- Misslyckad
- Stoppad
- Inaktiverad
- Frånkopplad.
Force-parametern är endast giltig när parametern Wait också används i kommandot .
Den här parametern introducerades i Windows PowerShell 3.0.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Id
Anger en matris med ID:t. Den här cmdleten hämtar resultatet av jobb med angivna ID:t.
ID:t är ett heltal som unikt identifierar jobbet i den aktuella sessionen.
Det är lättare att komma ihåg och skriva än instans-ID, men det är bara unikt i den aktuella sessionen. Du kan skriva ett eller flera ID:er avgränsade med kommatecken.
Om du vill hitta ID:t för ett jobb använder du Get-Job
.
Type: | Int32[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-InstanceId
Anger en matris med instans-ID:t. Den här cmdleten hämtar resultatet av jobb med angivna instans-ID:t.
Ett instans-ID är ett GUID som unikt identifierar jobbet på datorn.
Använd cmdleten för att hitta instans-ID:t för Get-Job
ett jobb.
Type: | Guid[] |
Position: | 0 |
Default value: | All instances |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Job
Anger det jobb för vilket resultat hämtas.
Ange en variabel som innehåller jobbet eller ett kommando som hämtar jobbet.
Du kan också skicka ett jobbobjekt till Receive-Job
.
Type: | Job[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Keep
Anger att den här cmdleten sparar aggregerade dataströmdata i systemet, även efter att du har tagit emot dem. Som standard raderas aggregerade dataströmmar när de har visats med Receive-Job
.
Om du stänger sessionen eller tar bort jobbet med cmdleten Remove-Job
tas även aggregerade dataström bort.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Location
Anger en matris med platser. Den här cmdleten hämtar bara resultatet av jobb på de angivna platserna.
Type: | String[] |
Position: | 1 |
Default value: | All locations |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Name
Anger en matris med egna namn. Den här cmdleten hämtar resultatet av jobb som har de angivna namnen. Jokertecken stöds.
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | True |
-NoRecurse
Anger att den här cmdleten endast hämtar resultat från det angivna jobbet.
Som standard Receive-Job
hämtar även resultatet av alla underordnade jobb för det angivna jobbet.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Session
Anger en matris med sessioner.
Den här cmdleten hämtar resultatet av jobb som kördes i den angivna PowerShell-sessionen (PSSession).
Ange en variabel som innehåller PSSession eller ett kommando som hämtar PSSession, till exempel ett Get-PSSession
kommando.
Type: | PSSession[] |
Position: | 1 |
Default value: | All sessions |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Wait
Anger att den här cmdleten undertrycker kommandotolken tills alla jobbresultat tas emot.
Som standard Receive-Job
returnerar omedelbart de tillgängliga resultaten.
Som standard väntar wait-parametern tills jobbet är i något av följande tillstånd:
- Slutförd
- Misslyckad
- Stoppad
- Inaktiverad
- Frånkopplad.
Om du vill att wait-parametern ska fortsätta att vänta om jobbtillståndet är pausat eller frånkopplat använder du parametern Tvinga tillsammans med parametern Vänta .
Den här parametern introducerades i Windows PowerShell 3.0.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WriteEvents
Anger att den här cmdleten rapporterar ändringar i jobbtillståndet medan den väntar på att jobbet ska slutföras.
Den här parametern är endast giltig när parametern Wait används i kommandot och parametern Behåll utelämnas.
Den här parametern introducerades i Windows PowerShell 3.0.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WriteJobInResults
Anger att den här cmdleten returnerar jobbobjektet följt av resultatet.
Den här parametern är endast giltig när parametern Wait används i kommandot och parametern Behåll utelämnas.
Den här parametern introducerades i Windows PowerShell 3.0.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Indata
Du kan skicka jobbobjekt till den här cmdleten.
Utdata
PSObject
Den här cmdleten returnerar resultatet av kommandona i jobbet.