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-Command
a 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-Job
parancsmag 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 parancsotStart-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-Command
haszná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 $j
Neve é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 |
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. | |
PSEventJob | 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