Dela via


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

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