Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
KRÁTKÝ POPIS
Poskytuje informace o tom, jak úlohy na pozadí PowerShellu spouští příkaz nebo výraz na pozadí bez interakce s aktuální relací.
DLOUHÝ POPIS
Toto téma vysvětluje, jak spouštět úlohy na pozadí v prostředí PowerShell na místním počítači. Informace o spouštění úloh na pozadí ve vzdálených počítačích naleznete v části about_Remote_Jobs.
Když spustíte úlohu na pozadí, příkazový řádek se vrátí okamžitě, i když dokončení úlohy trvá delší dobu. Během běhu úlohy můžete pokračovat v práci v sezení bez přerušení.
RUTINY ÚLOHY
cmdlet | Popis |
---|---|
Start-Job |
Spustí úlohu na pozadí v místním počítači. |
Get-Job |
Získá úlohy na pozadí, které byly spuštěny v |
aktuální relace. | |
Receive-Job |
Získá výsledky úloh na pozadí. |
Stop-Job |
Zastaví úlohu na pozadí. |
Wait-Job |
Potlačí příkazový řádek, dokud není zobrazena jedna nebo všechny úlohy. |
kompletní. | |
Remove-Job |
Odstraní úlohu na pozadí. |
Invoke-Command |
Parametr AsJob spustí libovolný příkaz jako pozadí |
úlohy na vzdáleném počítači. Můžete také použít | |
Invoke-Command pro vzdálené spuštění libovolného příkazu job, |
|
včetně příkazu Start-Job. |
JAK SPUSTIT ÚLOHU V MÍSTNÍM POČÍTAČI
Chcete-li spustit úlohu na pozadí v místním počítači, použijte rutinu Start-Job.
Chcete-li napsat příkaz Start-Job, uzavřete příkaz, který úloha spouští, do složených závorek ( { } ). K určení příkazu použijte parametr ScriptBlock.
Následující příkaz spustí úlohu na pozadí, která na místním počítači spustí příkaz Get-Process
.
Start-Job -ScriptBlock {Get-Process}
Příkaz Start-Job
vrátí objekt, který představuje úlohu. Objekt úlohy obsahuje užitečné informace o úloze, ale neobsahuje výsledky úlohy.
Uložte objekt úlohy do proměnné a poté jej použijte s ostatními rutinami úlohy ke správě úlohy na pozadí. Následující příkaz spustí objekt úlohy a uloží výsledný objekt úlohy do proměnné $job.
$job = Start-Job -ScriptBlock {Get-Process}
Rutinu Get-Job
můžete také použít k získání objektů, které představují úlohy spuštěné v aktuální relaci.
Get-Job
Vrátí stejný objekt úlohy, který vrátí Start-Job.
ZÍSKÁVÁNÍ OBJEKTŮ ÚLOH
Chcete-li získat objekt, který představuje úlohy na pozadí, které byly spuštěny v aktuální relaci, použijte rutinu Get-Job
. Bez parametrů Get-Job
vrátí všechny úlohy, které byly spuštěny v aktuální relaci.
Například následující příkaz získá úlohy v aktuální relaci.
PS C:> Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Running True localhost Get-Process
Objekt úlohy můžete také uložit do proměnné a použít ji k reprezentaci úlohy v pozdějším příkazu. Následující příkaz získá úlohu s ID 1 a uloží ji do proměnné $job.
$job = Get-Job -Id 1
Objekt úlohy obsahuje stav úlohy, který označuje, jestli se úloha dokončila. Dokončená úloha má stav "Dokončeno" nebo "Selhání". Úloha může být také blokovaná nebo spuštěná.
Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Complete True localhost Get-Process
ZÍSKÁNÍ VÝSLEDKŮ ÚLOHY
Když spustíte úlohu na pozadí, výsledky se nezobrazí okamžitě.
Místo toho rutina Start-Job vrátí objekt úlohy, který představuje úlohu, ale neobsahuje výsledky. Pokud chcete získat výsledky úlohy na pozadí, použijte rutinu Receive-Job
.
Následující příkaz používá rutinu Receive-Job
k získání výsledků úlohy. K identifikaci úlohy používá objekt úlohy uložený v proměnné $job.
Receive-Job -Job $job
Rutina Receive-Job vrátí výsledky úlohy.
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
103 4 11328 9692 56 1176 audiodg
804 14 12228 14108 100 101.74 1740 CcmExec
668 7 2672 6168 104 32.26 488 csrss
# ...
Výsledky úlohy můžete také uložit do proměnné. Následující příkaz uloží výsledky úlohy v proměnné $job do proměnné $results.
$results = Receive-Job -Job $job
Výsledky úlohy můžete také uložit do souboru pomocí operátoru přesměrování (>) nebo rutiny Out-File. Následující příkaz používá operátor přesměrování k uložení výsledků úlohy do proměnné $job v souboru Results.txt.
Receive-Job -Job $job > results.txt
ZÍSKÁNÍ A UDRŽENÍ DÍLČÍCH VÝSLEDKŮ ZAKÁZKY
Rutina Receive-Job získá výsledky úlohy na pozadí. Pokud je úloha dokončená, Receive-Job
získá všechny výsledky úlohy. Pokud je úloha stále spuštěná, získá Receive-Job dosud vygenerované výsledky.
Zbývající výsledky získáte opětovným spuštěním příkazů Receive-Job
.
Když Receive-Job
vrátí výsledky, ve výchozím nastavení tyto výsledky odstraní z mezipaměti, kde jsou uloženy výsledky úlohy. Pokud spustíte jiný Receive-Job
příkaz, získáte pouze výsledky, které ještě nebyly přijaty.
Následující příkazy zobrazují výsledky Receive-Job
příkazů, které se spustí před dokončením úlohy.
C:\PS> Receive-Job -Job $job
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
103 4 11328 9692 56 1176 audiodg
804 14 12228 14108 100 101.74 1740 CcmExec
C:\PS> Receive-Job -Job $job
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
68 3 2632 664 29 0.36 1388 ccmsetup
749 22 21468 19940 203 122.13 3644 communicator
905 7 2980 2628 34 197.97 424 csrss
1121 25 28408 32940 174 430.14 3048 explorer
Chcete-li zabránit Receive-Job
odstranění vrácených výsledků úlohy, použijte parametr Keep . Výsledkem je, že vrátí všechny výsledky, Receive-Job
které byly do té doby vygenerovány.
Následující příkazy ukazují účinek použití parametru Keep na úlohu, která ještě není dokončena.
C:\PS> Receive-Job -Job $job -Keep
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
103 4 11328 9692 56 1176 audiodg
804 14 12228 14108 100 101.74 1740 CcmExec
C:\PS> Receive-Job -Job $job -Keep
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
103 4 11328 9692 56 1176 audiodg
804 14 12228 14108 100 101.74 1740 CcmExec
68 3 2632 664 29 0.36 1388 ccmsetup
749 22 21468 19940 203 122.13 3644 communicator
905 7 2980 2628 34 197.97 424 csrss
1121 25 28408 32940 174 430.14 3048 explorer
ČEKÁNÍ NA VÝSLEDKY
Pokud spustíte příkaz, který trvá dlouhou dobu, můžete pomocí vlastností objektu úlohy určit, kdy je úloha dokončena. Následující příkaz použije objekt Get-Job
k získání všech úloh na pozadí v aktuální relaci.
Get-Job
Výsledky se zobrazí v tabulce. Stav úlohy se zobrazí ve sloupci Stav.
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Complete True localhost Get-Process
2 Job2 BackgroundJob Running True localhost Get-EventLog -Log ...
3 Job3 BackgroundJob Complete True localhost dir -Path C:\* -Re...
V tomto případě vlastnost State odhalí, že úloha 2 je stále spuštěna. Pokud byste k získání výsledků úlohy použili rutinu Receive-Job
, výsledky by byly neúplné. K opakovanému získání všech výsledků můžete použít rutinu Receive-Job
. Ve výchozím nastavení se při každém použití zobrazí pouze výsledky, které ještě nebyly přijaty, ale můžete použít parametr Keep rutiny Receive-Job k uchování výsledků, i když již byly přijaty.
Částečné výsledky můžete zapsat do souboru a poté připojit novější výsledky při jejich doručení, nebo můžete počkat a zkontrolovat stav úlohy později.
Můžete použít parametr Wait rutiny Receive-Job
, který nevrátí příkazový řádek, dokud není úloha dokončena a nejsou k dispozici všechny výsledky.
Můžete také použít rutinu Wait-Job
a čekat na všechny výsledky úlohy nebo na všechny výsledky úlohy.
Wait-Job
umožňuje počkat na určitou úlohu, na všechny úlohy nebo na dokončení kterékoli z úloh.
Následující příkaz pomocí rutiny Wait-Job počká na úlohu s ID 10.
Wait-Job -ID 10
V důsledku toho se příkazový řádek PowerShellu potlačí, dokud se úloha nedokončí.
Můžete také počkat na předem určené časové období. Tento příkaz používá parametr Timeout k omezení čekání na 120 sekund. Po vypršení doby se příkazový řádek vrátí, ale úloha se bude dál spouštět na pozadí.
Wait-Job -ID 10 -Timeout 120
ZASTAVENÍ ÚLOHY
Pokud chcete zastavit úlohu na pozadí, použijte rutinu Stop-Job
. Následující příkaz spustí úlohu, která získá každou položku v protokolu událostí systému. Uloží objekt úlohy do proměnné $job.
$job = Start-Job -ScriptBlock {Get-EventLog -Log System}
Následující příkaz zastaví úlohu. Používá operátor kanálu (|) k odeslání úlohy v proměnné $job do Stop-Job
.
$job | Stop-Job
ODSTRANĚNÍ ÚLOHY
Pokud chcete odstranit úlohu na pozadí, použijte rutinu Remove-Job
. Následující příkaz odstraní úlohu v proměnné $job.
Remove-Job -Job $job
VYŠETŘOVÁNÍ NEÚSPĚŠNÉ ÚLOHY
Chcete-li zjistit, proč se úloha nezdařila, použijte podvlastnost Reason objektu úlohy.
Následující příkaz spustí úlohu bez požadovaných přihlašovacích údajů. Uloží objekt úlohy do proměnné $job.
$job = Start-Job -ScriptBlock {New-Item -Path HKLM:\Software\MyCompany}
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 BackgroundJob Failed False localhost New-Item -Path HKLM:...
Následující příkaz používá vlastnost Reason k vyhledání chyby, která způsobila selhání úlohy.
$job.ChildJobs[0].JobStateInfo.Reason
V tomto případě úloha selhala, protože vzdálený počítač k spuštění příkazu vyžadoval explicitní přihlašovací údaje. Hodnota vlastnosti Reason je:
Připojení ke vzdálenému serveru se nezdařilo s následující chybovou zprávou: Přístup byl odepřen.