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
[-Name] <string[]>
[-Keep]
[-NoRecurse]
[-Force]
[-Wait]
[-AutoRemoveJob]
[-WriteEvents]
[-WriteJobInResults]
[<CommonParameters>]
Receive-Job
[-InstanceId] <guid[]>
[-Keep]
[-NoRecurse]
[-Force]
[-Wait]
[-AutoRemoveJob]
[-WriteEvents]
[-WriteJobInResults]
[<CommonParameters>]
Receive-Job
[-Id] <int[]>
[-Keep]
[-NoRecurse]
[-Force]
[-Wait]
[-AutoRemoveJob]
[-WriteEvents]
[-WriteJobInResults]
[<CommonParameters>]
Description
Cmdleten Receive-Job
hämtar resultatet av PowerShell-bakgrundsjobb, till exempel de som startas 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 få de återstående resultaten.
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 resultatet 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
hämtar även 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 hämta en cmdlet i modulen. Information om en viss typ av anpassat jobb 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}
Start-Sleep -Seconds 1
Receive-Job -Job $job
Dessa kommandon 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}
Start-Sleep -Seconds 1
$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-parametern Invoke-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 dessutom 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 code 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.
$invokeCommandSplat = @{
Session = $s
ScriptBlock = {
Start-Job -Name $('MyJob-' +$env:COMPUTERNAME) -ScriptBlock {
(Get-Date).ToString()
}
}
}
$j = Invoke-Command @invokeCommandSplat
# 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
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.
Exempel 5: Åtkomst till underordnade jobb
Parametern -Keep
bevarar tillståndet för de aggregerade strömmarna för ett jobb så att det kan visas igen. Utan den här parametern raderas alla aggregerade dataströmmar när jobbet tas emot.
Mer information finns i about_Job_Details
Kommentar
De aggregerade strömmarna innehåller strömmarna för alla underordnade jobb. Du kan fortfarande nå enskilda dataströmmar 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 Wait .
Den här parametern introducerades i Windows PowerShell 3.0.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | False |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | 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.
Typ: | String[] |
Alias: | Cn |
Position: | 1 |
Standardvärde: | All computers available |
Obligatorisk: | False |
Godkänn pipeline-indata: | True |
Godkänn jokertecken: | 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 parametern Receive-Job
Wait (Vänta) eller avslutar väntetiden när jobben finns i något av följande tillstånd:
- Slutförd
- Misslyckad
- Stoppat
- Inaktiverad
- Bortkopplad.
Force-parametern är endast giltig när parametern Wait också används i kommandot .
Den här parametern introducerades i Windows PowerShell 3.0.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | False |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-Id
Anger en matris med ID:er. Den här cmdleten hämtar resultatet av jobb med angivna ID:er.
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:t, men det är bara unikt i den aktuella sessionen. Du kan skriva ett eller flera ID:t avgränsade med kommatecken. Om du vill hitta ID:t för ett jobb använder du Get-Job
.
Typ: | Int32[] |
Position: | 0 |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | True |
Godkänn jokertecken: | False |
-InstanceId
Anger en matris med instans-ID:t. Den här cmdleten hämtar resultatet av jobb med angivna instans-ID:er.
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.
Typ: | Guid[] |
Position: | 0 |
Standardvärde: | All instances |
Obligatorisk: | True |
Godkänn pipeline-indata: | True |
Godkänn jokertecken: | 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
.
Typ: | Job[] |
Position: | 0 |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | True |
Godkänn jokertecken: | False |
-Keep
Anger att den här cmdleten sparar aggregerade dataströmmar i systemet, även efter att du har tagit emot dem. Som standard raderas aggregerade dataströmmar efter att ha visats med Receive-Job
.
Om du stänger sessionen eller tar bort jobbet med cmdleten Remove-Job
tas även aggregerade dataströmmar bort.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | False |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-Location
Anger en matris med platser. Den här cmdleten hämtar endast resultatet av jobb på de angivna platserna.
Typ: | String[] |
Position: | 1 |
Standardvärde: | All locations |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | 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.
Typ: | String[] |
Position: | 0 |
Standardvärde: | None |
Obligatorisk: | True |
Godkänn pipeline-indata: | True |
Godkänn jokertecken: | True |
-NoRecurse
Anger att denna cmdlet endast hämtar resultat från det angivna jobbet. Som standard Receive-Job
hämtar även resultatet av alla underordnade jobb i det angivna jobbet.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | False |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | 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.
Typ: | PSSession[] |
Position: | 1 |
Standardvärde: | All sessions |
Obligatorisk: | False |
Godkänn pipeline-indata: | True |
Godkänn jokertecken: | 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
- Stoppat
- Inaktiverad
- Frånkopplad
Om du vill dirigera parametern Wait att fortsätta vänta om jobbtillståndet är pausat eller frånkopplat använder du force-parametern tillsammans med parametern Vänta.
Den här parametern introducerades i Windows PowerShell 3.0.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | 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.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | False |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | 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.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | False |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
Indata
Du kan skicka jobbobjekt till den här cmdleten.
Utdata
Den här cmdleten returnerar resultatet av kommandona i jobbet.
Kommentarer
PowerShell innehåller följande alias för Receive-Job
:
- Alla plattformar:
rcjb