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
       [-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

Job

Du kan skicka jobbobjekt till den här cmdleten.

Utdata

PSObject

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