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-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. 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 parancsotStart-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-Command
kezdő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 $j
Name é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-Job
a . 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-Job
PSJobTypeName 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