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-CommandAsJob , 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

Viz také