about_Job_Details

Rövid leírás

A helyi és távoli számítógépek háttérfeladataival kapcsolatos részleteket tartalmaz.

Részletes leírás

Ez a témakör a háttérfeladatok fogalmát ismerteti, és technikai információkat nyújt arról, hogyan működnek a háttérfeladatok a PowerShellben.

Ez a témakör a about_Jobs, about_Thread_Jobs és about_Remote_Jobs témakörök kiegészítése.

A háttérfeladatok ismertetése

Egy háttérfeladat aszinkron módon futtat egy parancsot vagy kifejezést. Futtathat parancsmagot, függvényt, szkriptet vagy bármely más parancsalapú feladatot. Úgy tervezték, hogy hosszabb ideig tartó parancsokat futtasson, de bármilyen parancs futtatására használható a háttérben.

Szinkron parancs futtatásakor a PowerShell parancssora mindaddig le lesz tiltva, amíg a parancs be nem fejeződik. A háttérfeladatok azonban nem tiltják le a PowerShell-kérést. A háttérfeladat indítására parancs egy feladatobjektumot ad vissza. A parancssor azonnal visszatér, így a háttérfeladat futtatása közben más feladatokon is dolgozhat.

Ha azonban elindít egy háttérfeladatot, akkor sem kapja meg azonnal az eredményeket, még akkor sem, ha a feladat nagyon gyorsan fut. A visszaadott feladatobjektum hasznos információkat tartalmaz a feladatról, de nem tartalmazza a feladat eredményeit. A feladat eredményeinek lekéréséhez külön parancsot kell futtatnia. Parancsokat is futtathat a feladat leállításához, a feladat befejezésének várakozásához és a feladat törléséhez.

Ha egy háttérfeladat időzítését függetleníteni szeretné más parancsokkal, minden háttérfeladat a saját PowerShell-munkamenetében fut. Ez lehet azonban egy ideiglenes kapcsolat, amely csak a feladat futtatásához jön létre, majd megsemmisül, vagy állandó PSSession lehet, amellyel több kapcsolódó feladatot vagy parancsot is futtathat.

A feladatparancsmagok használata

Parancs használatával Start-Job elindíthat egy háttérfeladatot egy helyi számítógépen. Start-Job feladatobjektumot ad vissza. A parancsmaggal Get-Job a helyi számítógépen elindított feladatokat képviselő objektumokat is lekérheti.

A feladat eredményeinek lekéréséhez használjon egy parancsot Receive-Job . Ha a feladat nem fejeződött be, Receive-Job részleges eredményeket ad vissza. A parancsmaggal Wait-Job a parancssort is letilthatja, amíg a munkamenetben elindított feladatok egyike vagy mindegyike be nem fejeződik.

Háttérfeladat leállításához használja a Stop-Job parancsmagot. Feladat törléséhez használja a Remove-Job parancsmagot.

A parancsmagok működésével kapcsolatos további információkért tekintse meg az egyes parancsmagok súgótémakörét, és tekintse meg a about_Jobs.

Háttérfeladatok indítása távoli számítógépeken

Háttérfeladatokat helyi vagy távoli számítógépen is létrehozhat és kezelhet. Ha távolról szeretne futtatni egy háttérfeladatot, használja egy parancsmag AsJob paraméterét, például Invoke-Command, vagy használja a Invoke-Command parancsmagot egy Start-Job parancs távoli futtatásához. Egy háttérfeladatot interaktív munkamenetben is elindíthat.

A távoli háttérfeladatokkal kapcsolatos további információkért lásd: about_Remote_Jobs.

Gyermekfeladatok

Minden háttérfeladat egy szülőfeladatból és egy vagy több gyermekfeladatból áll. A használatban Start-Job lévő feladatokban vagy az AsJob paraméterben Invoke-Commanda szülőfeladat egy vezető. Nem futtat parancsokat, és nem ad vissza semmilyen eredményt. A parancsokat valójában a gyermekfeladatok futtatják. Előfordulhat, hogy a feladatok más parancsmagok használatát kezdik el használni.

A gyermekfeladatok a szülőfeladat-objektum ChildJobs tulajdonságában vannak tárolva. A ChildJobs tulajdonság egy vagy több gyermekfeladat-objektumot tartalmazhat. A gyermekfeladat-objektumok neve, azonosítója és példányazonosítója eltér a szülőfeladattól, így a szülő- és gyermekfeladatokat önállóan vagy egységként kezelheti.

Egy feladat szülő- és gyermekfeladatainak lekéréséhez használja a parancsmag IncludeChildJobs paraméterét Get-Job . Az IncludeChildJob paraméter a Windows PowerShell 3.0-ban lett bevezetve.

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

A szülőfeladat és csak az adott állapotértékkel rendelkező gyermekfeladatok lekéréséhez használja a Get-Jobparancsmag ChildJobState paraméterét. A ChildJobState paraméter a Windows PowerShell 3.0-ban lett bevezetve.

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

Ha le szeretné szerezni egy feladat gyermekfeladatait a PowerShell összes verziójában, használja a szülőfeladat ChildJob tulajdonságát.

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

A gyermekfeladaton is használhat parancsot Get-Job , ahogy az a következő parancsban is látható:

PS> Get-Job Job3

Id Name   PSJobTypeName State      HasMoreData   Location    Command
-- ----   ------------- -----      -----------   --------    -------
3  Job3                 Failed     False         localhost   Get-Process

A gyermekfeladat konfigurációja a feladat elindításához használt parancstól függ.

  • Ha Start-Job egy feladatot helyi számítógépen indít el, a feladat egy vezetői szülőfeladatból és egy alárendelt feladatból áll, amely a parancsot futtatja.

  • Ha az AsJob paraméterrel Invoke-Command indít el egy feladatot egy vagy több számítógépen, a feladat egy vezető szülőfeladatból és egy gyermekfeladatból áll minden egyes számítógépen futtatott feladathoz.

  • Ha Invoke-Command egy vagy több távoli számítógépen futtat parancsot Start-Job , az eredmény megegyezik az egyes távoli számítógépeken futtatott helyi parancsokkal. A parancs minden számítógéphez visszaad egy feladatobjektumot. A feladatobjektum egy vezetői szülőfeladatból és egy alárendelt feladatból áll, amely a parancsot futtatja.

A szülőfeladat az összes gyermekfeladatot jelöli. Szülőfeladatok kezelésekor a társított gyermekfeladatokat is kezelheti. Ha például leállít egy szülőfeladatot, az összes gyermekfeladat leáll. Ha egy szülőfeladat eredményeit kapja, az összes gyermekfeladat eredményét kapja meg.

A gyermekfeladatokat azonban külön is kezelheti. Ez akkor a legeredményesebb, ha egy feladattal kapcsolatos problémát szeretne kivizsgálni, vagy csak egy gyermekfeladat eredményét szeretné lekérni az AsJob paraméter Invoke-Commandhasználatával.

Az alábbi parancs az AsJob paraméterrel Invoke-Command indít el háttérfeladatokat a helyi számítógépen és két távoli számítógépen. A parancs menti a feladatot a $j változóba.

PS> $j = Invoke-Command -ComputerName localhost, Server01, Server02 `
-Command {Get-Date} -AsJob

Amikor megjeleníti a feladat $jNeve és ChildJob tulajdonságát, az azt mutatja, hogy a parancs egy három gyermekfeladatot tartalmazó feladatobjektumot adott vissza, egyet minden számítógéphez.

PS> $j | Format-List Name, ChildJobs

Name      : Job3
ChildJobs : {Job4, Job5, Job6}

Amikor megjeleníti a szülőfeladatot, az azt mutatja, hogy a feladat sikertelen volt.

PS> $j

Id Name   PSJobTypeName State      HasMoreData   Location
-- ----   ------------- -----      -----------   --------
3  Job3   RemotingJob   Failed     False         localhost,Server...

Ha azonban futtat egy Get-Job olyan parancsot, amely lekéri a gyermekfeladatokat, a kimenet azt mutatja, hogy csak egy gyermekfeladat meghiúsult.

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

Az összes gyermekfeladat eredményének lekéréséhez használja a Receive-Job parancsmagot a szülőfeladat eredményeinek lekéréséhez. Egy adott gyermekfeladat eredményeit is lekérheti, ahogyan az az alábbi parancsban is látható.

PS> Receive-Job -Name Job6 -Keep | Format-Table ComputerName,
>> DateTime -AutoSize
ComputerName DateTime
------------ --------
Server02     Thursday, March 13, 2008 4:16:03 PM

A PowerShell háttérfeladatok gyermekfeladat-funkciója nagyobb mértékben szabályozza a futtatott feladatokat.

Beosztástípusok

A PowerShell különböző típusú feladatokat támogat különböző feladatokhoz. A Windows PowerShell 3.0-tól kezdődően a fejlesztők "feladatforrás-adaptereket" írhatnak, amelyek új feladattípusokat adnak hozzá a PowerShellhez, és a feladatforrás-adaptereket is belefoglalják a modulokba. A modul importálásakor használhatja az új feladattípust a munkamenetben.

A PSScheduledJob modul például ütemezett feladatokat ad hozzá, a PSWorkflow modul pedig munkafolyamat-feladatokat ad hozzá.

Az egyéni feladattípusok jelentősen eltérhetnek a szokásos PowerShell-háttérfeladatoktól. Az ütemezett feladatok például lemezre vannak mentve; ezek nem csak egy adott munkamenetben léteznek. A munkafolyamat-feladatok felfüggeszthetők és folytathatók.

Az egyéni feladatok kezeléséhez használt parancsmagok a feladat típusától függenek. Néhány esetben a szabványos feladatparancsmagokat használja, például Get-Job a .Start-Job Mások speciális parancsmagokkal rendelkeznek, amelyek csak egy adott típusú feladatot kezelnek. Az egyéni feladattípusokkal kapcsolatos részletes információkért tekintse meg a feladattípussal kapcsolatos súgótémaköröket.

A feladat feladattípusának megkereséséhez használja a Get-Job parancsmagot. Get-Job különböző feladatobjektumokat ad vissza különböző típusú feladatokhoz. A visszaadott feladatobjektumok Get-Job PSJobTypeName tulajdonságának értéke a feladat típusát jelzi.

Az alábbi táblázat a PowerShell-lel kapcsolatos feladattípusokat sorolja fel.

Állás típusa Leírás
BackgroundJob Elkezdte használni a Start-Job parancsmagot.
RemoteJob A /a0> AsJob paraméterének használatbavétele
Invoke-Command Parancsmag.
PSWorkflowJob Egy munkafolyamat AsJob paraméterének használatbavétele.
PSScheduledJob Egy feladat-eseményindító által indított ütemezett feladat példánya.
CIMJob Egy parancsmag AsJob paraméterének használatbavétele
CDXML modul.
WMI-feladat Egy parancsmag AsJob paraméterének használatbavétele
WMI-modul.
P Standard kiadás ventJob LétrehozvaRegister-ObjectEvent és megadva egy
művelet a Művelet paraméterrel.

MEGJEGYZÉS: Mielőtt a Get-Job parancsmaggal lekérne egy adott típusú feladatot, ellenőrizze, hogy a feladattípust hozzáadó modul importálva van-e az aktuális munkamenetbe. Get-Job Ellenkező esetben nem kap ilyen típusú feladatokat.

Példák

Az alábbi parancsok létrehoznak egy helyi háttérfeladatot, egy távoli háttérfeladatot, egy munkafolyamat-feladatot és egy ütemezett feladatot. Ezután a Get-Job parancsmaggal szerzi be a feladatokat. Get-Job nem kapja meg az ütemezett feladatot, de lekéri az ütemezett feladat összes megkezdett példányát.

Indítsa el a háttérfeladatot a helyi számítógépen.

PS> Start-Job -Name LocalData {Get-Process}

Id Name        PSJobTypeName   State   HasMoreData   Location   Command
-- ----        -------------   -----   -----------   --------   -------
2  LocalData   BackgroundJob   Running        True   localhost  Get-Process

Távoli számítógépen futó háttérfeladat indítása.

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

Ütemezett feladat létrehozása

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

Munkafolyamat létrehozása.

PS> workflow Test-Workflow {Get-Process}

Futtassa a munkafolyamatot feladatként.


PS> Test-Workflow -AsJob -JobName TestWFJob

Id  Name       PSJobTypeName   State   HasMoreData   Location   Command
--  ----       -------------   -----   -----------   --------   -------
2   TestWFJob  PSWorkflowJob   NotStarted     True   localhost  Get-Process

Szerezze be a feladatokat. A Get-Job parancs nem kap ütemezett feladatokat, de lekéri az ütemezett feladat elindított példányait.

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

Ütemezett feladatok lekéréséhez használja a Get-ScheduledJob parancsmagot.

PS> Get-ScheduledJob

Id         Name            JobTriggers     Command       Enabled
--         ----            -----------     -------       -------
1          ScheduledJob    1               Get-Process   True

Lásd még