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