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-Job
a 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 .