about_Job_Details

Rövid leírás

Részletes információkat nyújt a helyi és távoli számítógépek háttérfeladatairól.

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.

Tudnivalók a háttérfeladatokról

A 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 parancsot futtathat a háttérben.

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

Háttérfeladat indításakor azonban nem 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 megvárásához és a feladat törléséhez.

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

A feladatparancsmagok használata

Start-Job Egy parancs használatával 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 jelölő objektumokat is lekérheti.

A feladat eredményeinek lekéréséhez használjon egy Receive-Job parancsot. Ha a feladat nem fejeződött be, Receive-Job részleges eredményeket ad vissza. A parancsmaggal letilthatja a Wait-Job parancssort, 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 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. Háttérfeladatot is indíthat egy interaktív munkamenetben.

További információ a távoli háttérfeladatokról: about_Remote_Jobs.

Gyermekfeladatok

Minden háttérfeladat egy szülőfeladatból és egy vagy több gyermekfeladatból áll. A kezdő Start-Job 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. A más parancsmagokat használó feladatok eltérően működhetnek.

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 gyermekfeladatok önállóan vagy egységként kezelhetők.

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-s verzió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-Job parancsmag ChildJobState paraméterét. A ChildJobState paraméter a Windows PowerShell 3.0-s verzió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 egy feladat gyermekfeladatait a PowerShell összes verziójában szeretné lekérni, 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

Használhat egy Get-Job parancsot is a gyermekfeladaton, ahogyan az a következő parancsban 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.

  • Start-Job Amikor 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éter Invoke-Command használatával indít el egy feladatot egy vagy több számítógépen, a feladat egy vezetői szülőfeladatból és egy gyermekfeladatból áll minden feladathoz, amely minden számítógépen fut.

  • Invoke-Command Ha egy parancsot Start-Job egy vagy több távoli számítógépen futtat, az eredmény megegyezik az egyes távoli számítógépeken futtatott helyi parancsokkal. A parancs feladatobjektumot ad vissza minden számítógéphez. 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. A 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 lesz állítva. Ha egy szülőfeladat eredményeit kapja meg, az összes gyermekfeladat eredményét megkapja.

A gyermekfeladatokat azonban külön-külön is kezelheti. Ez akkor lehet a legeredményesebb, ha egy feladattal kapcsolatos problémát szeretne kivizsgálni, vagy csak az egyik olyan gyermekfeladat eredményét szeretné megkapni, amely a következő AsJob paraméterrel Invoke-Commandkezdődött: .

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

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

Amikor megjeleníti a feladat $jName és ChildJob tulajdonságát, az azt mutatja, hogy a parancs egy feladatobjektumot adott vissza három gyermekfeladattal, 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 meghiúsult.

PS> $j

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

Ha azonban olyan Get-Job parancsot futtat, 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ényeinek lekéréséhez használja a Receive-Job parancsmagot a szülőfeladat eredményeinek lekéréséhez. De lekérheti egy adott gyermekfeladat eredményeit is, ahogy 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.

Feladattípusok

A PowerShell különböző típusú feladatokat támogat a különböző tevékenységekhez. A Windows PowerShell 3.0-s verziótól kezdődően a fejlesztők olyan "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.

Az egyéni feladattípusok jelentősen eltérhetnek a szokásos PowerShell-háttérfeladatoktól. Az ütemezett feladatokat például lemezre menti a rendszer; 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 az és Start-Joba . Mások speciális parancsmagokkal is 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 A különböző feladatobjektumokat ad vissza a különböző típusú feladatokhoz. A visszaadott feladatobjektumok Get-JobPSJobTypeName tulajdonságának értéke a feladat típusát jelzi.

Az alábbi táblázat a PowerShell-lel elérhető feladattípusokat sorolja fel.

Feladat típusa Description
BackgroundJob Elkezdte használni a Start-Job parancsmagot.
RemoteJobs-feladatok Started using the AsJob parameter of the
Invoke-Command parancsmagot.
PSWorkflowJob Egy munkafolyamat AsJob paraméterének használatbavétele.
PSScheduledJob Egy feladat-eseményindító által indított ütemezett feladat egy példánya.
CIM-feladatok Megkezdődött egy parancsmag AsJob paraméterének használata egy
CDXML modul.
WMI-feladatok Megkezdődött egy parancsmag AsJob paraméterének használata egy
WMI-modul.
PSEventJob LétrehozvaRegister-ObjectEvent és megadva egy
műveletet az Action 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 parancsmagot használja a feladatok lekéréséhez. Get-Job A nem kapja meg az ütemezett feladatot, de lekéri az ütemezett feladat összes megkezdett példányát.

Háttérfeladat indítása 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

Szerezd meg a munkát. A Get-Job parancs nem kap ütemezett feladatokat, de lekéri az elindított ütemezett feladat 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