Dela via


Receive-Job

Hämtar resultatet av PowerShell-bakgrundsjobben i den aktuella sessionen.

Syntax

Location (Standard)

Receive-Job
    [-Job] <Job[]>
    [[-Location] <string[]>]
    [-Keep]
    [-NoRecurse]
    [-Force]
    [-Wait]
    [-AutoRemoveJob]
    [-WriteEvents]
    [-WriteJobInResults]
    [<CommonParameters>]

ComputerName

Receive-Job
    [-Job] <Job[]>
    [[-ComputerName] <string[]>]
    [-Keep]
    [-NoRecurse]
    [-Force]
    [-Wait]
    [-AutoRemoveJob]
    [-WriteEvents]
    [-WriteJobInResults]
    [<CommonParameters>]

Session

Receive-Job
    [-Job] <Job[]>
    [[-Session] <PSSession[]>]
    [-Keep]
    [-NoRecurse]
    [-Force]
    [-Wait]
    [-AutoRemoveJob]
    [-WriteEvents]
    [-WriteJobInResults]
    [<CommonParameters>]

NameParameterSet

Receive-Job
    [-Name] <string[]>
    [-Keep]
    [-NoRecurse]
    [-Force]
    [-Wait]
    [-AutoRemoveJob]
    [-WriteEvents]
    [-WriteJobInResults]
    [<CommonParameters>]

InstanceIdParameterSet

Receive-Job
    [-InstanceId] <guid[]>
    [-Keep]
    [-NoRecurse]
    [-Force]
    [-Wait]
    [-AutoRemoveJob]
    [-WriteEvents]
    [-WriteJobInResults]
    [<CommonParameters>]

SessionIdParameterSet

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 parametern AsJob för alla cmdletar. 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 kommandot Receive-Job 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 jobbresultatet 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 kör du kommandot Receive-Job 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 får Receive-Job 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 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 parametern Job för Receive-Job för att få 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 få resultatet av jobbet. Den använder parametern Job 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 parametern AsJob för Invoke-Command 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 AsJobreturnerar 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 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ändningen av Invoke-Command för att köra kommandot Start-Job 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

Anmärkning

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 visar ett meddelande.

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.

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:False
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument: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.

Parameteregenskaper

Typ:

String[]

Standardvärde:All computers available
Stöder jokertecken:True
DontShow:False
Alias:Cn

Parameteruppsättningar

ComputerName
Position:1
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:True
Värde från återstående argument:False

-Force

Anger att den här cmdleten fortsätter att vänta om jobben är i pausade eller frånkopplade tillstånd. Som standard returnerar parametern Wait för Receive-Job, eller avslutar väntetiden, när jobben är i något av följande tillstånd:

  • Slutfört
  • Misslyckades
  • Stoppade
  • Avstängd
  • Bortkopplad.

Parametern Force är endast giltig när parametern Wait också används i kommandot .

Den här parametern introducerades i Windows PowerShell 3.0.

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:False
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument: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.

Parameteregenskaper

Typ:

Int32[]

Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

SessionIdParameterSet
Position:0
Obligatorisk:True
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:True
Värde från återstående argument: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. Om du vill hitta instans-ID:t för ett jobb använder du cmdleten Get-Job.

Parameteregenskaper

Typ:

Guid[]

Standardvärde:All instances
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

InstanceIdParameterSet
Position:0
Obligatorisk:True
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:True
Värde från återstående argument: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.

Parameteregenskaper

Typ:

Job[]

Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

Location
Position:0
Obligatorisk:True
Värde från pipeline:True
Värde från pipeline efter egenskapsnamn:True
Värde från återstående argument:False
Session
Position:0
Obligatorisk:True
Värde från pipeline:True
Värde från pipeline efter egenskapsnamn:True
Värde från återstående argument:False
ComputerName
Position:0
Obligatorisk:True
Värde från pipeline:True
Värde från pipeline efter egenskapsnamn:True
Värde från återstående argument: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 när de visas med Receive-Job.

Om du stänger sessionen eller tar bort jobbet med cmdleten Remove-Job tas även aggregerade dataströmmar bort.

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:False
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-Location

Anger en matris med platser. Den här cmdleten hämtar endast resultatet av jobb på de angivna platserna.

Parameteregenskaper

Typ:

String[]

Standardvärde:All locations
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

Location
Position:1
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument: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.

Parameteregenskaper

Typ:

String[]

Standardvärde:None
Stöder jokertecken:True
DontShow:False

Parameteruppsättningar

NameParameterSet
Position:0
Obligatorisk:True
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:True
Värde från återstående argument:False

-NoRecurse

Anger att denna cmdlet endast hämtar resultat från det angivna jobbet. Som standard hämtar Receive-Job också resultatet av alla underordnade jobb i det angivna jobbet.

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:False
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument: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.

Parameteregenskaper

Typ:

PSSession[]

Standardvärde:All sessions
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

Session
Position:1
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:True
Värde från återstående argument:False

-Wait

Anger att den här cmdleten undertrycker kommandotolken tills alla jobbresultat tas emot. Som standard returnerar Receive-Job omedelbart de tillgängliga resultaten.

Som standard väntar parametern Wait tills jobbet är i något av följande tillstånd:

  • Slutfört
  • Misslyckades
  • Stoppade
  • Avstängd
  • Bortkopplad

Använd parametern Force tillsammans med parametern Wait för att dirigera parametern Wait att fortsätta vänta om jobbtillståndet är pausat eller frånkopplat.

Den här parametern introducerades i Windows PowerShell 3.0.

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument: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 Keep utelämnas.

Den här parametern introducerades i Windows PowerShell 3.0.

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:False
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument: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 Keep utelämnas.

Den här parametern introducerades i Windows PowerShell 3.0.

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:False
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

CommonParameters

Den här cmdleten stöder vanliga parametrar: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction och -WarningVariable. Mer information finns i about_CommonParameters.

Indata

Job

Du kan skicka jobbobjekt till den här cmdleten.

Utdata

PSObject

Den här cmdleten returnerar resultatet av kommandona i jobbet.

Kommentarer

PowerShell innehåller följande alias för Receive-Job:

  • Alla plattformar:
    • rcjb