Receive-Job

Získá výsledky úloh prostředí PowerShell na pozadí v aktuální relaci.

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

Rutina Receive-Job získá výsledky úloh na pozadí PowerShellu, například těch, které byly spuštěny pomocí Start-Job rutiny nebo parametru AsJob libovolné rutiny. Výsledky všech úloh můžete získat nebo identifikovat úlohy podle jejich názvu, ID, ID instance, názvu počítače, umístění nebo relace nebo odesláním objektu úlohy.

Když spustíte úlohu na pozadí PowerShellu, úloha se spustí, ale výsledky se nezobrazí okamžitě. Místo toho příkaz vrátí objekt, který představuje úlohu na pozadí. Objekt úlohy obsahuje užitečné informace o úloze, ale neobsahuje výsledky. Tato metoda umožňuje pokračovat v práci v relaci během spuštění úlohy. Další informace o úlohách na pozadí v PowerShellu najdete v tématu about_Jobs.

Rutina Receive-Job získá výsledky vygenerované časem odeslání Receive-Job příkazu. Pokud se výsledky ještě nedokončí, můžete spustit další Receive-Job příkazy, abyste získali zbývající výsledky.

Ve výchozím nastavení se výsledky úloh při příjmu odstraní ze systému, ale výsledky můžete uložit pomocí parametru Keep , abyste je mohli znovu obdržet. Pokud chcete odstranit výsledky úlohy, spusťte Receive-Job příkaz znovu bez parametru Keep , zavřete relaci nebo pomocí Remove-Job rutiny odstraňte úlohu z relace.

Počínaje verzí Windows PowerShell 3.0 Receive-Job také získá výsledky vlastních typů úloh, jako jsou úlohy pracovních postupů a instance plánovaných úloh. Pokud chcete povolit Receive-Job získání výsledků vlastním typem úlohy, naimportujte modul, který podporuje vlastní typ úlohy, před spuštěním Receive-Job příkazu, a to buď pomocí Import-Module rutiny, nebo pomocí nebo získáním rutiny v modulu. Informace o konkrétním typu vlastní úlohy najdete v dokumentaci k funkci vlastního typu úlohy.

Příklady

Příklad 1: Získání výsledků pro určitou úlohu

$job = Start-Job -ScriptBlock {Get-Process}
Receive-Job -Job $job

Tyto příkazy používají parametr Receive-JobÚlohy k získání výsledků konkrétní úlohy.

První příkaz spustí úlohu s objektem Start-Job úlohy a uloží ho $job do proměnné.

Druhý příkaz použije rutinu Receive-Job k získání výsledků úlohy. K určení úlohy používá parametr Úloha .

Příklad 2: Použití parametru Keep

$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

Tento příklad uloží úlohu do $job proměnné a předá úlohu do rutiny Receive-Job . Parametr -Keep se také používá k povolení opětovného načtení všech agregovaných dat datového proudu po prvním zobrazení.

Příklad 3: Získání výsledků několika úloh na pozadí

Pokud použijete parametr Invoke-CommandAsJob ke spuštění úlohy, objekt úlohy se vytvoří v místním počítači, i když úloha běží na vzdálených počítačích. V důsledku toho použijete místní příkazy ke správě úlohy.

Při použití AsJob vrátí PowerShell jeden objekt úlohy, který obsahuje podřízenou úlohu pro každou spuštěnou úlohu. V tomto případě objekt úlohy obsahuje tři podřízené úlohy, jednu pro každou úlohu na každém vzdáleném počítači.

# 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

Příklad 4: Získání výsledků úloh na pozadí na více vzdálených počítačích

# 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 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.
$j = Invoke-Command -Session $s -ScriptBlock {​Start-Job -Name $('MyJob-' +$env:COMPUTERNAME) -ScriptBlock {(Get-Date).ToString()​}​}
# 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

Tento příklad ukazuje, jak získat výsledky úloh na pozadí spuštěné na třech vzdálených počítačích. Na rozdíl od předchozího příkladu Start-Job se příkazem Invoke-Command skutečně spustily tři nezávislé úlohy na každém ze tří počítačů. V důsledku toho příkaz vrátil tři objekty úlohy představující tři úlohy spouštěné místně na třech různých počítačích.

Příklad 5: Přístup k podřízeným úlohům

Parametr -Keep zachová stav agregovaných datových proudů úlohy, aby bylo možné ho znovu zobrazit. Bez tohoto parametru se při přijetí úlohy vymažou všechna agregovaná data datového proudu. Další informace najdete v tématu about_Job_Details

Poznámka

Agregované streamy zahrnují streamy všech podřízených úloh. K jednotlivým datovým proudům můžete stále přistupovat prostřednictvím objektu úlohy a podřízených objektů úlohy.

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

Parametry

-AutoRemoveJob

Označuje, že tato rutina odstraní úlohu po vrácení výsledků úlohy. Pokud má úloha více výsledků, úloha se stále odstraní, ale Receive-Job zobrazí zprávu.

Tento parametr funguje pouze u vlastních typů úloh. Je určena pro instance typů úloh, které ukládají úlohu nebo typ mimo relaci, například instance naplánovaných úloh.

Tento parametr nelze použít bez parametru Wait .

Tento parametr byl zaveden v Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-ComputerName

Určuje pole názvů počítačů.

Tento parametr vybere z výsledků úlohy, které jsou uložené v místním počítači. Nezískají data pro úlohy spuštěné na vzdálených počítačích. Pokud chcete získat výsledky úlohy uložené na vzdálených počítačích, použijte Invoke-Command rutinu ke vzdálenému Receive-Job spuštění příkazu.

Type:String[]
Aliases:Cn
Position:1
Default value:All computers available
Accept pipeline input:True
Accept wildcard characters:True

-Force

Označuje, že tato rutina pokračuje v čekání, pokud jsou úlohy ve stavu Pozastaveno nebo Odpojeno . Ve výchozím nastavení parametr Wait vrátí Receive-Job nebo ukončí čekání, pokud jsou úlohy v jednom z následujících stavů:

  • Dokončeno
  • Neúspěšný
  • Zastaveno
  • Dočasně blokován.
  • Nesouvislý.

Parametr Force je platný pouze v případech, kdy se v příkazu používá také parametr Wait .

Tento parametr byl zaveden v Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-Id

Určuje pole ID. Tato rutina získá výsledky úloh se zadanými ID.

ID je celé číslo, které jednoznačně identifikuje úlohu v aktuální relaci. Je jednodušší si zapamatovat a zadat než ID instance, ale je jedinečné pouze v aktuální relaci. Můžete zadat jedno nebo více ID oddělených čárkami. K vyhledání ID úlohy použijte Get-Job.

Type:Int32[]
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters:False

-InstanceId

Určuje pole ID instancí. Tato rutina získá výsledky úloh se zadanými ID instance.

ID instance je identifikátor GUID, který jednoznačně identifikuje úlohu v počítači. K vyhledání ID instance úlohy použijte rutinu Get-Job .

Type:Guid[]
Position:0
Default value:All instances
Accept pipeline input:True
Accept wildcard characters:False

-Job

Určuje úlohu, pro kterou se načítají výsledky.

Zadejte proměnnou obsahující úlohu nebo příkaz, který úlohu získá. Objekt úlohy můžete také převést na Receive-Job.

Type:Job[]
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters:False

-Keep

Označuje, že tato rutina ukládá agregovaná data streamu v systému, a to i po jejich přijetí. Ve výchozím nastavení se agregovaná data datového proudu vymažou po zobrazení pomocí Receive-Job.

Zavření relace nebo odebrání úlohy pomocí Remove-Job rutiny také odstraní agregovaná data datového proudu.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-Location

Určuje pole umístění. Tato rutina získá pouze výsledky úloh v zadaných umístěních.

Type:String[]
Position:1
Default value:All locations
Accept pipeline input:False
Accept wildcard characters:False

-Name

Určuje pole popisných názvů. Tato rutina získá výsledky úloh, které mají zadané názvy. Podporují se zástupné znaky.

Type:String[]
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters:True

-NoRecurse

Označuje, že tato rutina získá výsledky pouze ze zadané úlohy. Ve výchozím nastavení Receive-Job také získá výsledky všech podřízených úloh zadané úlohy.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-Session

Určuje pole relací. Tato rutina získá výsledky úloh, které byly spuštěny v zadané relaci PowerShellu (PSSession). Zadejte proměnnou, která obsahuje psSession nebo příkaz, který získá psSession, například Get-PSSession příkaz.

Type:PSSession[]
Position:1
Default value:All sessions
Accept pipeline input:True
Accept wildcard characters:False

-Wait

Označuje, že tato rutina potlačí příkazový řádek, dokud nebudou přijaty všechny výsledky úlohy. Ve výchozím nastavení Receive-Job okamžitě vrátí dostupné výsledky.

Ve výchozím nastavení parametr Wait čeká, dokud úloha není v jednom z následujících stavů:

  • Dokončeno
  • Neúspěšný
  • Zastaveno
  • Dočasně blokován.
  • Nesouvislý.

Pokud chcete směrovat parametr Wait , aby pokračoval v čekání, pokud je stav úlohy pozastavený nebo odpojený, použijte parametr Force společně s parametrem Wait .

Tento parametr byl zaveden v Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-WriteEvents

Označuje, že tato rutina hlásí změny ve stavu úlohy, zatímco čeká na dokončení úlohy.

Tento parametr je platný pouze v případě, že se v příkazu použije parametr Wait a parametr Keep je vynechán.

Tento parametr byl zaveden v Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

-WriteJobInResults

Označuje, že tato rutina vrátí objekt úlohy následovaný výsledky.

Tento parametr je platný pouze v případě, že se v příkazu použije parametr Wait a parametr Keep je vynechán.

Tento parametr byl zaveden v Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

Vstupy

Job

Objekty úloh můžete do této rutiny převést.

Výstupy

PSObject

Tato rutina vrátí výsledky příkazů v úloze.