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 podrobnosti o úlohách na pozadí na místních a vzdálených počítačích.
Podrobný popis
Toto téma vysvětluje koncept úlohy na pozadí a poskytuje technické informace o tom, jak úlohy na pozadí fungují v PowerShellu.
Toto téma je doplněk k tématům about_Jobs, about_Thread_Jobs a about_Remote_Jobs .
Informace o úlohách na pozadí
Úloha na pozadí spouští příkaz nebo výraz asynchronně. Může spustit rutinu, funkci, skript nebo jakoukoli jinou úlohu založenou na příkazech. Je navržená tak, aby spouštěla příkazy, které potrvá delší dobu, ale můžete ho použít ke spuštění libovolného příkazu na pozadí.
Když se spustí synchronní příkaz, příkazový řádek PowerShellu se potlačí, dokud se příkaz neskončí. Úloha na pozadí ale nepotlačí výzvu PowerShellu. Příkaz pro spuštění úlohy na pozadí vrátí objekt úlohy. Výzva se okamžitě vrátí, abyste mohli pracovat na jiných úkolech při spuštění úlohy na pozadí.
Když ale spustíte úlohu na pozadí, nezobrazí se výsledky okamžitě, i když se úloha spustí velmi rychle. Vrácený objekt úlohy obsahuje užitečné informace o úloze, ale neobsahuje výsledky úlohy. Pokud chcete získat výsledky úlohy, musíte spustit samostatný příkaz. Můžete také spustit příkazy pro zastavení úlohy, počkat na dokončení úlohy a odstranit úlohu.
Aby bylo načasování úlohy na pozadí nezávislé na ostatních příkazech, spustí se každá úloha na pozadí ve své vlastní relaci PowerShellu. Může to ale být dočasné připojení, které se vytvoří jenom ke spuštění úlohy a je pak zničeno, nebo může to být trvalé psSession, které můžete použít ke spuštění několika souvisejících úloh nebo příkazů.
Použití rutin úloh
Start-Job
Pomocí příkazu spusťte úlohu na pozadí na místním počítači.
Start-Job
vrátí objekt úlohy. Pomocí rutiny můžete také získat objekty představující úlohy, které byly spuštěny v místním počítači Get-Job
.
K získání výsledků úlohy použijte Receive-Job
příkaz. Pokud úloha není dokončená, Receive-Job
vrátí částečné výsledky. Pomocí rutiny Wait-Job
můžete také potlačit příkazový řádek, dokud nebude dokončena jedna nebo všechny úlohy, které byly spuštěny v relaci.
Pokud chcete zastavit úlohu na pozadí, použijte rutinu Stop-Job
. Pokud chcete odstranit úlohu, použijte rutinu Remove-Job
.
Další informace o tom, jak rutiny fungují, najdete v tématu nápovědy pro každou rutinu a podívejte se na about_Jobs.
Spouštění úloh na pozadí na vzdálených počítačích
Úlohy na pozadí můžete vytvářet a spravovat na místním nebo vzdáleném počítači. Pokud chcete spustit úlohu na pozadí vzdáleně, použijte parametr AsJob rutiny, například Invoke-Command
, nebo použijte rutinu Invoke-Command
ke vzdálenému Start-Job
spuštění příkazu. Úlohu na pozadí můžete spustit také v interaktivní relaci.
Další informace o vzdálených úlohách na pozadí najdete v tématu about_Remote_Jobs.
Podřízené úlohy
Každá úloha na pozadí se skládá z nadřazené úlohy a jedné nebo více podřízených úloh. V úlohách, které začaly používat Start-Job
nebo , nadřazená úloha je vedoucí pracovník. Nespouští žádné příkazy ani nevrací žádné výsledky. Příkazy jsou ve skutečnosti spouštěné podřízenými úlohami. Úlohy, které začaly používat jiné rutiny, můžou fungovat jinak.
Podřízené úlohy jsou uloženy ve vlastnosti ChildJobs nadřazeného objektu úlohy. Vlastnost ChildJobs může obsahovat jeden nebo více podřízených objektů úlohy. Podřízené objekty úlohy mají Název, IDa InstanceId, které se liší od nadřazené úlohy, abyste mohli spravovat nadřazené a podřízené úlohy jednotlivě nebo jako jednotku.
Pokud chcete získat nadřazené a podřízené úlohy úlohy, použijte parametr IncludeChildJobs rutiny Get-Job
. Parametr IncludeChildJob byl zaveden ve Windows PowerShellu 3.0.
Get-Job -IncludeChildJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Failed True localhost Get-Process
2 Job2 Completed True Server01 Get-Process
3 Job3 Failed False localhost Get-Process
Chcete-li získat nadřazenou úlohu a pouze podřízené úlohy s konkrétní hodnotou state , použijte parametr ChildJobState rutiny Get-Job
. Parametr ChildJobState byl zaveden v prostředí Windows PowerShell 3.0.
Get-Job -ChildJobState Failed
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Failed True localhost Get-Process
3 Job3 Failed False localhost Get-Process
K získání podřízených úloh úlohy ve všech verzích PowerShellu použijte vlastnost ChildJob nadřazené úlohy.
(Get-Job Job1).ChildJobs
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 Job2 Completed True Server01 Get-Process
3 Job3 Failed False localhost Get-Process
Můžete také použít příkaz pro podřízenou Get-Job
úlohu, jak je znázorněno v následujícím příkazu:
Get-Job Job3
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
3 Job3 Failed False localhost Get-Process
Konfigurace podřízené úlohy závisí na příkazu, který použijete ke spuštění úlohy.
Pokud používáte
Start-Job
ke spuštění úlohy v místním počítači, úloha se skládá z výkonné nadřazené úlohy a podřízené úlohy, která spouští příkaz.Když použijete ke spuštění úlohy na jednom nebo více počítačích, úloha se skládá z výkonné nadřazené úlohy a podřízené úlohy pro každou úlohu spuštěnou na každém počítači.
Pokud používáte
Invoke-Command
ke spuštěníStart-Job
příkazu na jednom nebo více vzdálených počítačích, výsledek je stejný jako místní příkaz spuštěný na každém vzdáleném počítači. Příkaz vrátí objekt úlohy pro každý počítač. Objekt úlohy se skládá z nadřazené úlohy vedoucího pracovníka a jedné podřízené úlohy, která spouští příkaz.
Nadřazená úloha představuje všechny podřízené úlohy. Při správě nadřazené úlohy také spravujete přidružené podřízené úlohy. Pokud například zastavíte nadřazenou úlohu, zastaví se všechny podřízené úlohy. Pokud získáte výsledky nadřazené úlohy, získáte výsledky všech podřízených úloh.
Podřízené úlohy ale můžete spravovat také jednotlivě. To je nejužitečnější, když chcete prozkoumat problém s úlohou nebo získat výsledky pouze jednoho z několika podřízených úloh, které začaly používat parametr AsJob .Invoke-Command
Následující příkaz používá ke spuštění úloh na pozadí na místním počítači a dvou vzdálených počítačích. Příkaz uloží úlohu do $j
proměnné.
$invokeCommandSplat = @{
ComputerName = 'localhost', 'Server01', 'Server02'
ScriptBlock = {Get-Date}
AsJob = $true
}
$j = Invoke-Command @invokeCommandSplat
Když zobrazíte vlastnosti Name a ChildJob úlohy v $j
, ukazuje, že příkaz vrátil objekt úlohy se třemi podřízenými úlohami, jeden pro každý počítač.
$j | Format-List Name, ChildJobs
Name : Job3
ChildJobs : {Job4, Job5, Job6}
Když zobrazíte nadřazenou úlohu, zobrazí se, že úloha selhala.
$j
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
3 Job3 RemotingJob Failed False localhost,Server...
Když ale spustíte Get-Job
příkaz, který získá podřízené úlohy, výstup ukazuje, že selhala pouze jedna podřízená úloha.
Get-Job -IncludeChildJobs
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
3 Job3 RemotingJob Failed False localhost,Server...
4 Job4 Completed True localhost Get-Date
5 Job5 Failed False Server01 Get-Date
6 Job6 Completed True Server02 Get-Date
Pokud chcete získat výsledky všech podřízených úloh, použijte rutinu Receive-Job
k získání výsledků nadřazené úlohy. Můžete ale také získat výsledky konkrétní podřízené úlohy, jak je znázorněno v následujícím příkazu.
Receive-Job -Name Job6 -Keep |
Format-Table ComputerName, DateTime -AutoSize
ComputerName DateTime
------------ --------
Server02 Thursday, March 13, 2008 4:16:03 PM
Funkce podřízených úloh na pozadí PowerShellu poskytuje větší kontrolu nad úlohami, které spouštíte.
Typ úloh
PowerShell podporuje různé typy úloh pro různé úlohy. Počínaje Windows PowerShellem 3.0 můžou vývojáři psát "adaptéry zdroje úloh", které do PowerShellu přidávají nové typy úloh a zahrnují zdrojové adaptéry úloh v modulech. Při importu modulu můžete v relaci použít nový typ úlohy. Například modul PSScheduledJob přidává naplánované úlohy a modul PSWorkflow přidává úlohy pracovního postupu.
Vlastní typy úloh se můžou výrazně lišit od standardních úloh na pozadí PowerShellu. Například naplánované úlohy se ukládají na disk; neexistují pouze v konkrétní relaci. Úlohy pracovního postupu je možné pozastavit a obnovit.
Rutiny, které používáte ke správě vlastních úloh, závisí na typu úlohy. U některých používáte standardní rutiny úloh, například Get-Job
a Start-Job
.
Ostatní mají speciální rutiny, které spravují jenom určitý typ úlohy.
Podrobné informace o vlastních typech úloh najdete v tématech nápovědy o typu úlohy.
K vyhledání typu úlohy použijte rutinu Get-Job
.
Get-Job
vrátí různé objekty úlohy pro různé typy úloh. Hodnota PSJobTypeName vlastnost objekty úlohy, která Get-Job
vrací indikuje typ úlohy.
Následující seznam popisuje předdefinované typy úloh PowerShellu.
-
BackgroundJob – začínáme používat rutinu
Start-Job
. -
RemoteJob – Začali používat parametr AsJob rutiny
Invoke-Command
. - CIMJob – Začali používat parametr AsJob rutiny z modulu CDXML.
- WMIJob – Začalo se používat parametr AsJob rutiny z modulu WMI.
-
PSEventJob – Vytvořeno pomocí
Register-ObjectEvent
a zadání akce s parametrem Action.
Poznámka
Než použijete rutinu Get-Job
k získání úloh určitého typu, ověřte, že modul, který přidává typ úlohy, se importuje do aktuální relace.
Jinak Get-Job
nemůže získat úlohy tohoto typu.
Windows PowerShell 5.1 obsahuje následující další typy úloh.
- PSWorkflowJob – začal používat parametr AsJob pracovního postupu.
- PSScheduledJob – instance naplánované úlohy spuštěné triggerem úlohy.
Tyto typy úloh jsou dostupné jenom ve Windows PowerShellu 5.1. Moduly, které přidávají tyto typy úloh, nejsou kompatibilní s PowerShellem 6.0 a novějším.
Další informace najdete v následujících článcích:
Příklady
Následující příkazy vytvoří místní úlohu na pozadí, vzdálenou úlohu na pozadí, úlohu pracovního postupu a naplánovanou úlohu. Pak použije rutinu Get-Job
k získání úloh.
Get-Job
naplánovanou úlohu nezískne, ale získá všechny spuštěné instance naplánované úlohy.
Spusťte úlohu na pozadí na místním počítači.
PS> Start-Job -Name LocalData {Get-Process}
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 LocalData BackgroundJob Running True localhost Get-Process
Spusťte úlohu na pozadí, která běží na vzdáleném počítači.
$invokeCommandSplat = @{
ComputerName = 'Server01'
AsJob = $true
JobName = 'RemoteData'
ScriptBlock = {Get-Process}
}
Invoke-Command @invokeCommandSplat
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 RemoteData RemoteJob Running True Server01 Get-Process