about_Job_Details
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 však být dočasné připojení, které je vytvořeno pouze ke spuštění úlohy a je pak zničeno, nebo to může být trvalá psSession , kterou 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 parametr Invoke-Command
AsJob , 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 úloh mají název, ID a 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.
PS> 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.
PS> 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.
PS> (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:
PS> 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 parametr
Invoke-Command
AsJob 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á parametr Invoke-Command
AsJob 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é.
PS> $j = Invoke-Command -ComputerName localhost, Server01, Server02 `
-Command {Get-Date} -AsJob
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č.
PS> $j | Format-List Name, ChildJobs
Name : Job3
ChildJobs : {Job4, Job5, Job6}
Když zobrazíte nadřazenou úlohu, zobrazí se, že úloha selhala.
PS> $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.
PS> 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.
PS> 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í tabulka uvádí typy úloh, které jsou součástí PowerShellu.
Typ práce | Popis |
---|---|
Úloha pozadí | Začínáme používat rutinu Start-Job . |
Vzdálená úloha | Začínáme s použitím parametru AsJob |
Invoke-Command rutina. |
|
PsWorkflowJob | Začal používat parametr AsJob pracovního postupu. |
PSScheduledJob | Instance naplánované úlohy spuštěné triggerem úlohy |
CIMJob | Začínáme používat parametr AsJob rutiny z |
Modul CDXML. | |
WMIJob | Začínáme používat parametr AsJob rutiny z |
Modul WMI. | |
PSEventJob | Vytvořeno pomocíRegister-ObjectEvent a určení |
action with the Action parameter. |
POZNÁMKA: Před použitím rutiny Get-Job
k získání úloh určitého typu ověřte, že modul, který přidává typ úlohy, je importován do aktuální relace.
Get-Job
V opačném případě nezískute úlohy tohoto typu.
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
nezískne naplánovanou úlohu, 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.
PS> Invoke-Command -ComputerName Server01 {Get-Process} `
-AsJob -JobName RemoteData
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 RemoteData RemoteJob Running True Server01 Get-Process
Vytvoření naplánované úlohy
PS> Register-ScheduledJob -Name ScheduledJob -ScriptBlock `
{Get-Process} -Trigger (New-JobTrigger -Once -At "3 PM")
Id Name JobTriggers Command Enabled
-- ---- ----------- ------- -------
1 ScheduledJob 1 Get-Process True
Vytvořte pracovní postup.
PS> workflow Test-Workflow {Get-Process}
Spusťte pracovní postup jako úlohu.
PS> Test-Workflow -AsJob -JobName TestWFJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 TestWFJob PSWorkflowJob NotStarted True localhost Get-Process
Získejte úlohy. Příkaz Get-Job
nezískne naplánované úlohy, ale získá instance naplánované úlohy, které jsou spuštěny.
PS> Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 LocalData BackgroundJob Completed True localhost Get-Process
4 RemoteData RemoteJob Completed True Server01 Get-Process
6 TestWFJob PSWorkflowJob Completed True localhost WorkflowJob
8 ScheduledJob PSScheduledJob Completed True localhost Get-Process
K získání naplánovaných úloh použijte rutinu Get-ScheduledJob
.
PS> Get-ScheduledJob
Id Name JobTriggers Command Enabled
-- ---- ----------- ------- -------
1 ScheduledJob 1 Get-Process True