Sdílet prostřednictvím


Wait-Job

Čeká, dokud jedna nebo všechny úlohy PowerShellu spuštěné v relaci nejsou v ukončovacím stavu.

Syntaxe

Wait-Job
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [-Id] <Int32[]>
    [<CommonParameters>]
Wait-Job
    [-Job] <Job[]>
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [<CommonParameters>]
Wait-Job
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [-Name] <String[]>
    [<CommonParameters>]
Wait-Job
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [-InstanceId] <Guid[]>
    [<CommonParameters>]
Wait-Job
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [-State] <JobState>
    [<CommonParameters>]
Wait-Job
    [-Any]
    [-Timeout <Int32>]
    [-Force]
    [-Filter] <Hashtable>
    [<CommonParameters>]

Description

Rutina Wait-Job čeká na to, aby úloha byla v ukončovacím stavu, než bude pokračovat v provádění. Ukončující stavy jsou:

  • Hotový
  • Neúspěšný
  • Zastavený
  • Pozastavený
  • Nesouvislý

Můžete počkat na zadanou úlohu nebo všechny úlohy jsou v ukončovacím stavu. Můžete také nastavit maximální dobu čekání na úlohu pomocí parametru Časový limit nebo můžete použít parametr Vynucení k čekání na úlohu ve stavu Suspended nebo Disconnected.

Po dokončení příkazů v úloze Wait-Job vrátí objekt úlohy a pokračuje v provádění.

Pomocí rutiny Wait-Job můžete čekat na úlohy spuštěné pomocí rutiny Start-Job nebo parametru AsJob rutiny Invoke-Command. Další informace o úlohách najdete v tématu about_Jobs.

Počínaje Windows PowerShellem 3.0 rutina Wait-Job také čeká na vlastní typy úloh, jako jsou úlohy pracovního postupu a instance naplánovaných úloh. Pokud chcete umožnit, aby Wait-Job mohlo čekat na úlohy určitého typu, naimportujte modul, který podporuje tento vlastní typ úloh, do relace před spuštěním rutiny Get-Job. Můžete to provést buď pomocí rutiny Import-Module, nebo získáním rutiny z modulu. Informace o konkrétním vlastním typu úlohy najdete v dokumentaci funkce vlastního typu úlohy.

Příklady

Příklad 1: Čekání na všechny úlohy

Get-Job | Wait-Job

Tento příkaz čeká na dokončení všech úloh spuštěných v relaci.

Příklad 2: Čekání na úlohy spuštěné na vzdálených počítačích pomocí Start-Job

$s = New-PSSession Server01, Server02, Server03
Invoke-Command -Session $s -ScriptBlock {Start-Job -Name Date1 -ScriptBlock {Get-Date}}
$done = Invoke-Command -Session $s -Command {Wait-Job -Name Date1}
$done.Count

3

Tento příklad ukazuje, jak použít rutinu Wait-Job s úlohami spuštěnými na vzdálených počítačích pomocí rutiny Start-Job. Příkazy Start-Job i Wait-Job se odesílají do vzdáleného počítače pomocí rutiny Invoke-Command.

Tento příklad používá Wait-Job k určení, jestli je dokončen Get-Date příkaz spuštěný jako úloha na třech různých počítačích.

První příkaz vytvoří relaci Windows PowerShell (PSSession) na každém ze tří vzdálených počítačů a uloží ji do proměnné $s.

Druhý příkaz používá Invoke-Command ke spuštění Start-Job v každém ze tří sezení v $s. Všechny úlohy mají název Date1.

Třetí příkaz používá Invoke-Command ke spuštění Wait-Job. Tento příkaz čeká na dokončení úloh Date1 v každém počítači. Uloží výslednou kolekci (pole) úlohy objekty v proměnné $done.

Čtvrtý příkaz používá vlastnost Count pole objektů úloh v proměnné $done k určení počtu dokončených úloh.

Příklad 3: Určení, kdy se první úloha dokončí

$s = New-PSSession -ComputerName (Get-Content -Path .\Machines.txt)
$c = 'Get-EventLog -LogName System | Where-Object {$PSItem.EntryType -eq "error" --and $PSItem.Source -eq "LSASRV"} | Out-File -FilePath Errors.txt'
Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {$Using:c}
Invoke-Command -Session $s -ScriptBlock {Wait-Job -Any}

V tomto příkladu se používá parametr AnyWait-Job k určení, kdy je první z mnoha úloh spuštěných v aktuální relaci v ukončovacím stavu. Ukazuje také, jak pomocí rutiny Wait-Job čekat na dokončení vzdálených úloh.

První příkaz vytvoří PSSession na každém počítači uvedeném v souboru Machines.txt a uloží PSSession objekty v proměnné $s. Příkaz používá rutinu Get-Content k získání obsahu souboru. Příkaz Get-Content je uzavřený v závorkách, aby se zajistilo, že se spustí před příkazem New-PSSession.

Druhý příkaz uloží řetězec příkazu Get-EventLog v uvozovkách do proměnné $c.

Třetí příkaz používá rutinu Invoke-Command ke spuštění Start-Job v každém sezení v $s. Příkaz Start-Job spustí úlohu, která spustí příkaz Get-EventLog v proměnné $c.

Příkaz používá modifikátor oboru Using k označení, že proměnná $c byla definována v místním počítači. Použití modifikátoru oboru se zavádí v prostředí Windows PowerShell 3.0. Další informace o Použití modifikátoru oboru naleznete v tématu about_Remote_Variables.

Čtvrtý příkaz používá Invoke-Command ke spuštění příkazu Wait-Job v rámci relací. Použije parametr Any k vyčkání, dokud první úloha na vzdálených počítačích nedosáhne stavu ukončování.

Příklad 4: Nastavení doby čekání na úlohy na vzdálených počítačích

PS> $s = New-PSSession -ComputerName Server01, Server02, Server03
PS> $jobs = Invoke-Command -Session $s -ScriptBlock {Start-Job -ScriptBlock {Get-Date}}
PS> $done = Invoke-Command -Session $s -ScriptBlock {Wait-Job -Timeout 30}
PS>

Tento příklad ukazuje, jak pomocí parametru Časový limitWait-Job nastavit maximální dobu čekání na úlohy spuštěné na vzdálených počítačích.

První příkaz vytvoří psSession na každém ze tří vzdálených počítačů (Server01, Server02 a Server03) a pak uloží PSSession objekty do $s proměnné.

Druhý příkaz používá Invoke-Command ke spuštění Start-Job v každém z PSSession objekty v $s. Uloží výsledné objekty úlohy do proměnné $jobs.

Třetí příkaz používá Invoke-Command ke spuštění Wait-Job v každé relaci v $s. Příkaz Wait-Job určuje, jestli se všechny příkazy dokončily do 30 sekund. Pomocí parametru Timeout s hodnotou 30 určí maximální dobu čekání a uloží výsledky příkazu do proměnné $done.

V takovém případě se po 30 sekundách dokončil pouze příkaz na počítači Server02. Wait-Job ukončí čekání, vrátí objekt představující dokončenou úlohu a zobrazí příkazový řádek.

Proměnná $done obsahuje objekt úlohy, který představuje úlohu spuštěnou na serveru Server02.

Příklad 5: Počkejte na dokončení jedné z několika úloh.

Wait-Job -id 1, 2, 5 -Any

Tento příkaz identifikuje tři úlohy podle jejich ID a počká, dokud některý z nich není v ukončovacím stavu. Provádění pokračuje, jakmile se dokončí první úloha.

Příklad 6: Počkejte na určité období a pak povolte pokračování úlohy na pozadí.

Wait-Job -Name "DailyLog" -Timeout 120

Tento příkaz počká 120 sekund (dvě minuty) na dokončení úlohy DailyLog. Pokud se úloha nedokončí během následujících dvou minut, provádění pokračuje a úloha se bude dál spouštět na pozadí.

Příklad 7: Čekání na úlohu podle názvu

Wait-Job -Name "Job3"

Tento příkaz používá název úlohy k identifikaci úlohy, pro kterou se má čekat.

Příklad 8: Čekání na úlohy spuštěné na místním počítači s Start-Job

$j = Start-Job -ScriptBlock {Get-ChildItem -Filter *.ps1 | Where-Object {$PSItem.LastWriteTime -gt ((Get-Date) - (New-TimeSpan -Days 7))}}
$j | Wait-Job

Tento příklad ukazuje, jak použít rutinu Wait-Job s úlohami spuštěnými v místním počítači pomocí Start-Job.

Tyto příkazy spustí úlohu, která získá soubory skriptů Windows PowerShellu, které byly přidány nebo aktualizovány v posledním týdnu.

První příkaz používá Start-Job ke spuštění úlohy v místním počítači. Úloha spustí příkaz Get-ChildItem, který získá všechny soubory s příponou názvu souboru .ps1, které byly přidány nebo aktualizovány v posledním týdnu.

Třetí příkaz používá Wait-Job k čekání na ukončení úlohy. Po dokončení úlohy příkaz zobrazí objekt úlohy, který obsahuje informace o úloze.

Příklad 9: Čekání na úlohy spuštěné na vzdálených počítačích pomocí Invoke-Command

$s = New-PSSession -ComputerName Server01, Server02, Server03
$j = Invoke-Command -Session $s -ScriptBlock {Get-Process} -AsJob
$j | Wait-Job

Tento příklad ukazuje, jak používat Wait-Job s úlohami spuštěnými na vzdálených počítačích pomocí parametru AsJobInvoke-Command. Při použití asjobse úloha vytvoří v místním počítači a výsledky se automaticky vrátí do místního počítače, i když úloha běží na vzdálených počítačích.

Tento příklad používá Wait-Job k určení, jestli Get-Process příkaz spuštěný v relacích na třech vzdálených počítačích je v ukončovacím stavu.

První příkaz vytvoří psSession objekty na třech počítačích a uloží je do $s proměnné.

Druhý příkaz používá Invoke-Command ke spuštění Get-Process v každém ze tří sezení v $s. Příkaz používá parametr AsJob ke spuštění příkazu asynchronně jako úlohu. Příkaz vrátí objekt úlohy stejně jako úlohy spuštěné pomocí Start-Joba objekt úlohy je uložen v proměnné $j.

Třetí příkaz používá operátor roury (|) k odeslání objektu úlohy v $j do cmdletu Wait-Job. V tomto případě není vyžadován příkaz Invoke-Command, protože úloha se nachází v místním počítači.

Příklad 10: Čekání na úlohu s ID

Get-Job

Id   Name     State      HasMoreData     Location             Command
--   ----     -----      -----------     --------             -------
1    Job1     Completed  True            localhost,Server01.. get-service
4    Job4     Completed  True            localhost            dir | where

Wait-Job -Id 1

Tento příkaz čeká na úlohu s hodnotou ID 1.

Parametry

-Any

Označuje, že tato rutina vrátí objekt úlohy a pokračuje v provádění po dokončení jakékoli úlohy. Ve výchozím nastavení Wait-Job čeká na dokončení všech zadaných úloh před zobrazením výzvy.

Typ:SwitchParameter
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Filter

Určuje tabulku hodnot hash podmínek. Tato cmdlet čeká na úlohy, které splňují všechny podmínky v tabulce hash. Zadejte tabulku hash, kde klíče jsou vlastnosti úlohy a hodnoty jsou hodnoty vlastností úlohy.

Tento parametr funguje jenom u vlastních typů úloh, jako jsou úlohy pracovního postupu a naplánované úlohy. Nefunguje na standardních úlohách, jako jsou úlohy vytvořené pomocí rutiny Start-Job. Informace o podpoře tohoto parametru najdete v tématu nápovědy pro typ úlohy.

Tento parametr byl představen ve Windows PowerShellu 3.0.

Typ:Hashtable
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-Force

Indikuje, že tento cmdlet nadále čeká na úlohy, které jsou ve stavu Pozastaveno nebo Odpojeno. Ve výchozím nastavení Wait-Job vrátí nebo ukončí čekání, když jsou úlohy v jednom z následujících stavů:

  • Hotový
  • Neúspěšný
  • Zastavený
  • Pozastavený
  • Nesouvislý

Tento parametr byl představen ve Windows PowerShellu 3.0.

Typ:SwitchParameter
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Id

Určuje pole ID úloh, pro které tento cmdlet čeká.

ID je celé číslo, které jednoznačně identifikuje úlohu v aktuální relaci. ** Snadněji se zapamatuje a zadává než identifikátor instance, ale je jedinečný pouze v aktuální relaci. Můžete zadat jedno nebo více ID oddělených čárkami. Pokud chcete zjistit ID úlohy, zadejte Get-Job.

Typ:Int32[]
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-InstanceId

Určuje pole ID instancí úloh, na jejichž dokončení tato rutina čeká. Výchozí nastavení zahrnuje všechny úlohy.

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

Typ:Guid[]
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-Job

Určuje úlohy, pro které tento cmdlet čeká. Zadejte proměnnou obsahující objekty úlohy nebo příkaz, který získá objekty úlohy. Můžete také použít operátor kanálu k odesílání objektů úloh do Wait-Job cmdletu. Ve výchozím nastavení Wait-Job čeká na všechny úlohy vytvořené v aktuální relaci.

Typ:Job[]
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-Name

Určuje uživatelsky přívětivé názvy úloh, pro které tento cmdlet čeká.

Typ:String[]
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-State

Určuje stav úlohy. Tato rutina čeká pouze na úlohy v zadaném stavu. Přijatelné hodnoty pro tento parametr jsou:

  • Nezahájeno
  • Běhání
  • Hotový
  • Neúspěšný
  • Zastavený
  • Blokovaný
  • Pozastavený
  • Nesouvislý
  • Pozastavení
  • Zastavení

Další informace o stavech úloh viz JobState.

Typ:JobState
Přípustné hodnoty:NotStarted, Running, Completed, Failed, Stopped, Blocked, Suspended, Disconnected, Suspending, Stopping, AtBreakpoint
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-Timeout

Určuje maximální dobu čekání pro každou úlohu v sekundách. Výchozí hodnota -1 označuje, že rutina počká, dokud se úloha nedokončí. Časování začíná odesláním příkazu Wait-Job, nikoli příkazu Start-Job.

Pokud je tento čas překročen, čekání skončí a provádění pokračuje, i když úloha stále běží. Příkaz nezobrazí žádnou chybovou zprávu.

Typ:Int32
Aliasy:TimeoutSec
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

Vstupy

System.Management.Automation.RemotingJob

Objekt úlohy můžete do této rutiny převést.

Výstupy

System.Management.Automation.PSRemotingJob

Tato rutina vrátí objekty úlohy, které představují úlohy v ukončovacím stavu. Pokud čekání skončí, protože je překročena hodnota parametru časového limitu, Wait-Job nevrátí žádné objekty.

Poznámky

PowerShell obsahuje následující aliasy pro Wait-Job:

  • Všechny platformy:
    • wjb

Ve výchozím nastavení Wait-Job vrátí nebo ukončí čekání, když jsou úlohy v jednom z následujících stavů:

  • Hotový
  • Neúspěšný
  • Zastavený
  • Pozastavený
  • Nesouvislý

Pokud chcete, aby Wait-Job pokračoval v čekání na pozastavené a odpojené úlohy, použijte parametr Force.