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, a teprve potom pokračuje v provádění. Ukončující stavy jsou:

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

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ého limitu nebo pomocí parametru Vynutit čekání na úlohu ve stavech nebo Disconnected stavechSuspended.

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

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

Počínaje Windows PowerShellem 3.0 Wait-Job rutina také čeká na vlastní typy úloh, jako jsou úlohy pracovního postupu a instance naplánovaných úloh. Pokud chcete povolit Wait-Job čekání na úlohy určitého typu, naimportujte modul, který podporuje vlastní typ úlohy, do relace před spuštěním Get-Job rutiny, buď pomocí rutiny Import-Module , nebo pomocí rutiny nebo získáním rutiny v 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í úlohy 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 pomocí rutiny použít rutinu Wait-Job s úlohami spuštěnými na vzdálených počítačích Start-Job . Příkazy Start-Job se Wait-Job odesílají do vzdáleného počítače pomocí rutiny Invoke-Command .

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

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

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

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

Čtvrtý příkaz používá vlastnost Count pole objektů úloh v $done proměnné 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 pomocí parametru Wait-Job Any určí, 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 počkat na dokončení vzdálených úloh.

První příkaz vytvoří psSession na všech počítačích uvedených v souboru Machines.txt a uloží objekty PSSession do $s proměnné. Příkaz použije 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ží Get-EventLog do proměnné řetězec příkazu v $c uvozovkách.

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

Příkaz používá modifikátor using scope k označení, že $c proměnná byla definována v místním počítači. Modifikátor rozsahu Using se zavádí ve Windows PowerShellu 3.0. Další informace o modifikátoru oboru najdete v tématu about_Remote_Variables.

Čtvrtý příkaz používá Invoke-Command ke spuštění Wait-Job příkazu v relacích. Pomocí parametru Any čeká na ukončení prvního úlohy ve vzdálených počítačích.

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 Wait-Job Časový limit 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ží objekty PSSession do $s proměnné.

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

Třetí příkaz se 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 výsledky příkazu uloží do $done proměnné.

V takovém případě se po 30 sekundách dokončil pouze příkaz na počítači Se serverem 02. Wait-Job ukončí čekání, vrátí objekt, který představuje úlohu, která byla dokončena, 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 na místním počítači spuštěné se spuštěním úlohy 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í Get-ChildItem příkaz, 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í, dokud úloha není v ukončovacím stavu. Po dokončení úlohy příkaz zobrazí objekt úlohy, který obsahuje informace o úloze.

Příklad 9: Čekání na úlohy spuštěné ve vzdálených počítačích pomocí příkazu 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 AsJob parametru Invoke-Command. Při použití úlohy AsJob se ú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 je příkaz spuštěný v relacích na třech vzdálených počítačích v ukončovacím stavu.

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

Druhý příkaz se používá Invoke-Command ke spuštění Get-Process v každé ze tří relací 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 $j proměnné.

Třetí příkaz používá operátor kanálu (|) k odeslání objektu $j úlohy do rutiny Wait-Job . V Invoke-Command tomto případě není vyžadován příkaz, 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í čeká na Wait-Job 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 rutina č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

Označuje, že tato rutina nadále čeká na úlohy 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ů:

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

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é tato rutina čeká.

ID je celé číslo, které jednoznačně identifikuje úlohu v aktuální relaci. Je jednodušší 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. Pokud chcete najít 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, pro které tato rutina čeká. Výchozí hodnota je 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é tato rutina čeká. Zadejte proměnnou obsahující objekty úlohy nebo příkaz, který získá objekty úlohy. K odesílání objektů úloh do Wait-Job rutiny můžete použít také operátor kanálu. 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 popisné názvy úloh, pro které tato rutina č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. Tento parametr přijímá tyto hodnoty:

  • NotStarted
  • Spuštěno
  • Dokončeno
  • Neúspěšný
  • Zastaveno
  • Blokované
  • Dočasně blokován.
  • Odpojeno
  • Pozastavení
  • Zastavování

Další informace o stavech úloh naleznete v části JobState – výčet.

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í se spustí, když příkaz odešlete Wait-Job , ne Start-Job příkaz.

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 nevrací žá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ů:

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

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