Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Rövid leírás
Ismerteti, hogyan futtathat háttérfeladatokat távoli számítógépeken.
Hosszú leírás
A PowerShell egyszerre futtat parancsokat és szkripteket a feladatokon keresztül. A PowerShell három feladattípust biztosít az egyidejűség támogatásához.
-
RemoteJob– A parancsok és szkriptek távoli munkamenetben futnak. -
BackgroundJob– A parancsok és szkriptek külön folyamatban futnak a helyi gépen. További információ: about_Jobs. -
PSTaskJobvagyThreadJob– A parancsok és szkriptek külön szálon futnak ugyanazon a folyamaton belül a helyi gépen. További információ: about_Thread_Jobs.
A szkriptek távoli, külön gépen vagy külön folyamatban történő futtatása nagy elkülönítést biztosít. A távoli feladatban előforduló hibák nem érintik a többi futó feladatot vagy a feladatot kezdő szülőmunkamenetet. Az újraegyeztetési réteg azonban többletterhelést okoz, beleértve az objektumszerializálást is. Minden objektum szerializálva és deszerializálva lesz, ahogy a szülő munkamenet és a távoli (feladat)munkamenet között kerülnek átadásra. A nagy méretű összetett adatobjektumok szerializálása nagy mennyiségű számítási és memória-erőforrást használhat fel, és nagy mennyiségű adatot továbbíthat a hálózaton.
Fontos
A feladatot létrehozó szülő munkamenet is figyeli a feladat állapotát, és összegyűjti a folyamatadatokat. A feladat gyermekfolyamatát a szülőfolyamat leállítja, amint a feladat befejeződött. Ha a szülő munkamenet le van állítva, a rendszer az összes futó gyermekfeladatot leállítja a gyermekfolyamatokkal együtt.
Kétféleképpen lehet megkerülni ezt a helyzetet:
- A leválasztott munkamenetekben futó feladatok létrehozásához használja a
Invoke-Command. A cikk leválasztott folyamatok című szakaszában olvashat. - A
Start-Processhasználatával feladat helyett új folyamatot hozhat létre. További információ: Folyamat indítása.
Távoli feladatok
A távoli számítógépeken három különböző módszerrel futtathat feladatokat.
Interaktív munkamenet indítása távoli számítógépen. Ezután kezdjen el egy feladatot az interaktív munkamenetben. Az eljárások megegyeznek egy helyi feladat futtatásával, bár minden műveletet a távoli számítógépen hajtanak végre.
Futtasson egy feladatot egy távoli számítógépen, amely visszaadja az eredményeket a helyi számítógépnek. Ezt a módszert akkor használja, ha a feladatok eredményeit szeretné összegyűjteni, és a helyi számítógépen egy központi helyen tartani.
Futtasson egy feladatot egy távoli számítógépen, amely megőrzi az eredményeket a távoli számítógépen. Ezt a módszert akkor használja, ha a feladatadatok biztonságosabban megmaradnak az eredeti számítógépen.
Feladat indítása interaktív munkamenetben
Egy interaktív munkamenetet egy távoli számítógéppel indíthat el, majd az interaktív munkamenet során elindíthat egy feladatot. Az interaktív munkamenetekről további információt a about_Remoteés a Enter-PSSessioncímű témakörben talál.
Egy feladat interaktív munkamenetben való indításának eljárása majdnem megegyezik a helyi számítógépen futó háttérfeladat indításának eljárásával. Az összes művelet azonban a távoli számítógépen történik, nem a helyi számítógépen.
A
Enter-PSSessionparancsmaggal interaktív munkamenetet indíthat távoli számítógéppel. AEnter-PSSessionComputerName paraméterével ideiglenes kapcsolatot hozhat létre az interaktív munkamenethez. Vagy a Munkamenet paraméterrel futtathatja az interaktív munkamenetet egy PowerShell-munkamenetben (PSSession).Az alábbi parancs egy interaktív munkamenetet indít el a Server01 számítógépen.
C:\PS> Enter-PSSession -ComputerName Server01A parancssor megváltozik, hogy most már csatlakozik a Server01 számítógéphez.
Server01\C:>Ha távoli feladatot szeretne elindítani a munkamenetben, használja a
Start-Jobparancsmagot. Az alábbi parancs egy távoli feladatot futtat, amely lekéri az eseményeket a Windows PowerShell eseménynaplójában a Server01 számítógépen. AStart-Jobparancsmag egy, a feladatot jelképező objektumot ad vissza.Ez a parancs menti a feladatobjektumot a
$jobváltozóba.Server01\C:> $job = Start-Job -ScriptBlock { Get-EventLog "Windows PowerShell" }A feladat futtatása közben az interaktív munkamenet használatával más parancsokat is futtathat, beleértve más feladatokat is. A feladat befejezéséig azonban nyitva kell tartania az interaktív munkamenetet. Ha befejezi a munkamenetet, a feladat megszakad, és az eredmények elvesznek.
Ha szeretné megtudni, hogy a feladat befejeződött-e, jelenítse meg a
$jobváltozó értékét, vagy használja aGet-Jobparancsmagot a feladat lekéréséhez. Az alábbi parancs aGet-Jobparancsmaggal jeleníti meg a feladatot.Server01\C:> Get-Job $job SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 1 Job1 Complete True localhost Get-EventLog "Windows...A
Get-Jobkimenet azt mutatja, hogy a feladat a "localhost" számítógépen fut, mert a feladat be lett kapcsolva, és ugyanazon a számítógépen fut (ebben az esetben a Server01).A feladat eredményeinek lekéréséhez használja a
Receive-Jobparancsmagot. Az eredményeket megjelenítheti az interaktív munkamenetben, vagy mentheti őket a távoli számítógépen lévő fájlba. Az alábbi parancs lekéri a feladat eredményeit a $job változóban. A parancs az átirányítási operátor (>) használatával menti a feladat eredményeit a Kiszolgáló01 számítógépen található PsLog.txt fájlba.Server01\C:> Receive-Job $job > C:\logs\PsLog.txtAz interaktív munkamenet befejezéséhez használja a
Exit-PSSessionparancsmagot. A parancssor úgy változik, hogy a helyi számítógépen az eredeti munkamenetben van.Server01\C:> Exit-PSSession C:\PS>Ha bármikor meg szeretné tekinteni a
PsLog.txtfájl tartalmát a Server01 számítógépen, indítsan el egy másik interaktív munkamenetet, vagy futtasson egy távoli parancsot. Ez a parancstípus a legjobban PSSession (állandó kapcsolat) esetén futtatható, ha több parancsot szeretne használni aPsLog.txtfájlban lévő adatok vizsgálatához és kezeléséhez. A PSSessions szolgáltatással kapcsolatos további információkért lásd: about_PSSessions.Az alábbi parancsok a
New-PSSessionparancsmaggal hoznak létre egy PSSession, amely a Server01 számítógéphez csatlakozik, és aInvoke-Commandparancsmaggal futtatnak egyGet-Contentparancsot a PSSessionban a fájl tartalmának megtekintéséhez.$s = New-PSSession -ComputerName Server01 Invoke-Command -Session $s -ScriptBlock { Get-Content C:\logs\pslog.txt}
Távoli feladat indítása, amely visszaadja az eredményeket a helyi számítógépnek (AsJob)
Ha olyan távoli számítógépen szeretne feladatot indítani, amely visszaadja a parancs eredményeit a helyi számítógépre, használja a parancsmag AsJob paraméterét, például a Invoke-Command parancsmagot.
Az AsJob paraméter használatakor a feladatobjektum ténylegesen létrejön a helyi számítógépen annak ellenére, hogy a feladat a távoli számítógépen fut. A feladat befejezése után a rendszer visszaadja az eredményeket a helyi számítógépnek.
A Feladat főnevét (a Feladat parancsmagokat) tartalmazó parancsmagokkal kezelheti a parancsmagok által létrehozott feladatokat. A AsJob paraméterekkel rendelkező parancsmagok többsége nem használja a PowerShell-újramotálást, így azokat olyan számítógépeken is használhatja, amelyek nincsenek újraküldésre konfigurálva, és amelyek nem felelnek meg az újraegyezés követelményeinek.
Az alábbi parancs a
Invoke-Commandparaméterével indít el egy feladatot a Server01 számítógépen. A feladat egyGet-Eventlogparancsot futtat, amely lekéri az eseményeket a rendszernaplóban. A JobName paraméterrel megjelenítendő nevet rendelhet a feladathoz.Invoke-Command -ComputerName Server01 -ScriptBlock { Get-EventLog System} -AsJobA parancs eredményei a következő mintakimenethez hasonlítanak.
SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 1 Job1 Running True Server01 Get-EventLog SystemAz AsJob paraméter használata esetén
Invoke-Commandugyanazt a típusú feladatobjektumot adja vissza, amelyetStart-Jobad vissza. A feladatobjektumot mentheti egy változóba, vagyGet-Jobparanccsal lekérheti a feladatot.Vegye figyelembe, hogy a Hely tulajdonság értéke azt mutatja, hogy a feladat a Server01 számítógépen futott.
A parancsmag
Invoke-Commandparaméterével indított feladatok kezeléséhez használja a Feladat parancsmagokat. Mivel a távoli feladatot jelképező feladatobjektum a helyi számítógépen található, a feladat kezeléséhez nem kell távoli parancsokat futtatnia.Annak megállapításához, hogy a feladat befejeződött-e, használjon egy
Get-Jobparancsot. Az alábbi parancs lekéri az aktuális munkamenetben elindított összes feladatot.Get-JobMivel a távoli feladat az aktuális munkamenetben indult el, egy helyi
Get-Jobparancs kapja meg a feladatot. A feladatobjektum State tulajdonsága azt mutatja, hogy a parancs sikeresen befejeződött.SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 1 Job1 Completed True Server01 Get-EventLog SystemA feladat eredményeinek lekéréséhez használja a
Receive-Jobparancsmagot. Mivel a feladat eredményei automatikusan visszakerülnek arra a számítógépre, ahol a feladatobjektum található, az eredményeket helyiReceive-Jobparanccsal szerezheti be.Az alábbi parancs a
Receive-Jobparancsmaggal lekéri a feladat eredményeit. A munkamenet-azonosítóval azonosítja a feladatot. Ez a parancs menti a feladat eredményeit a $results változóba. Az eredményeket egy fájlba is átirányíthatja.$results = Receive-Job -Id 1
Távoli feladat indítása, amely a távoli számítógépen tárolja az eredményeket
Ha olyan távoli számítógépen szeretne feladatot indítani, amely a távoli számítógépen tárolja a parancs eredményeit, a Invoke-Command parancsmaggal futtasson egy Start-Job parancsot egy távoli számítógépen. Ezzel a módszerrel több számítógépen futtathat feladatokat.
Ha távolról futtat egy Start-Job parancsot, a feladatobjektum létrejön a távoli számítógépen, és a feladat eredményei megmaradnak a távoli számítógépen.
A feladat szempontjából minden művelet helyi. Csak távolról futtat parancsokat egy helyi feladat távoli számítógépen való kezeléséhez.
A
Invoke-Commandparancsmaggal futtasson egyStart-Jobparancsot egy távoli számítógépen.Ehhez a parancshoz PSSession (állandó kapcsolat) szükséges. Ha a
Invoke-CommandComputerName paraméterével hoz létre ideiglenes kapcsolatot, a feladatobjektum visszaadásakor aInvoke-Commandparancs teljesnek minősül. Ennek eredményeképpen az ideiglenes kapcsolat bezárul, és a feladat megszakad.Az alábbi parancs a
New-PSSessionparancsmaggal hoz létre egy PSSessiont, amely a Server01 számítógéphez csatlakozik. A parancs menti a PSSessiont a$sváltozóban.$s = New-PSSession -ComputerName Server01A következő parancs a
Invoke-Commandparancsmaggal futtat egyStart-Jobparancsot a PSSessionban. AStart-Jobés aGet-Eventlogparancs zárójelek közé van zárva.Invoke-Command -Session $s -ScriptBlock { Start-Job -ScriptBlock {Get-EventLog System}}Az eredmények a következő mintakimenethez hasonlítanak.
Id Name State HasMoreData Location Command -- ---- ----- ----------- -------- ------- 2 Job2 Running True Localhost Get-EventLog SystemHa távolról futtat egy
Start-Jobparancsot,Invoke-Commandugyanazt a típusú feladatobjektumot adja vissza, amelyetStart-Jobvisszaad. A feladatobjektumot mentheti egy változóba, vagyGet-Jobparanccsal lekérheti a feladatot.Vegye figyelembe, hogy a Hely tulajdonság értéke azt mutatja, hogy a feladat a helyi számítógépen futott, "LocalHost" néven, annak ellenére, hogy a feladat a Server01 számítógépen futott. Mivel a feladatobjektum a Server01 számítógépen jön létre, és a feladat ugyanazon a számítógépen fut, helyi háttérfeladatnak számít.
Távoli feladat kezeléséhez használja a Feladat parancsmagokat. Mivel a feladatobjektum a távoli számítógépen található, távoli parancsokat kell futtatnia a feladat eredményeinek lekéréséhez, leállításához, várakozásához vagy lekéréséhez.
Annak megtekintéséhez, hogy a feladat befejeződött-e, egy
Invoke-Commandparanccsal futtasson egyGet-Jobparancsot a Kiszolgáló01 számítógéphez csatlakoztatott PSSessionban.Invoke-Command -Session $s -ScriptBlock {Get-Job}A parancs egy feladatobjektumot ad vissza. A feladatobjektum State tulajdonsága azt mutatja, hogy a parancs sikeresen befejeződött.
SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 2 Job2 Completed True LocalHost Get-EventLog SystemA feladat eredményeinek lekéréséhez a
Invoke-Commandparancsmaggal futtasson egyReceive-Jobparancsot a Server01 számítógéphez csatlakoztatott PSSessionban.Az alábbi parancs a
Receive-Jobparancsmaggal lekéri a feladat eredményeit. A munkamenet-azonosítóval azonosítja a feladatot. Ez a parancs menti a feladat eredményeit a$resultsváltozóba. AReceive-JobKeep paraméterével tárolja az eredményt a távoli számítógépen található feladatgyorsítótárban.$results = Invoke-Command -Session $s -ScriptBlock { Receive-Job -SessionId 2 -Keep }Az eredményeket átirányíthatja a helyi vagy távoli számítógépen található fájlba is. Az alábbi parancs átirányítási operátorral menti az eredményeket egy fájlba a Server01 számítógépen.
Invoke-Command -Session $s -Command { Receive-Job -SessionId 2 > C:\logs\pslog.txt }
Futtatás leválasztott folyamatként
Ahogy korábban említettük, a szülő munkamenet leállásakor a rendszer az összes futó gyermekfeladatot leállítja a gyermekfolyamatokkal együtt. A helyi gépen az aktuális PowerShell-munkamenethez nem csatolt feladatok futtatásához használhatja az újraegyezést.
Hozzon létre egy új PowerShell-munkamenetet a helyi gépen. A Invoke-Command használata feladat indításához ebben a munkamenetben.
Invoke-Command lehetővé teszi a távoli munkamenet leválasztását és a szülő munkamenet leállítását. Később elindíthat egy új PowerShell-munkamenetet, és csatlakozhat a korábban leválasztott munkamenethez a feladat monitorozásának folytatásához. Az eredeti PowerShell-munkamenetbe visszaadott adatok azonban elvesznek a munkamenet leállásakor. Csak a kapcsolat megszakadása után létrehozott új adatobjektumok lesznek visszaadva újracsatlakozáskor.
# Create remote session on local machine
PS> $session = New-PSSession -Cn localhost
# Start remote job
PS> $job = Invoke-Command -Session $session -ScriptBlock { 1..60 | % { sleep 1; "Output $_" } } -AsJob
PS> $job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Running True localhost 1..60 | % { sleep 1; ...
# Disconnect the job session
PS> Disconnect-PSSession $session
Id Name Transport ComputerName ComputerType State ConfigurationName Availability
-- ---- --------- ------------ ------------ ----- ----------------- ------------
1 Runspace1 WSMan localhost RemoteMachine Disconnected Microsoft.PowerShell None
PS> $job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Disconnected True localhost 1..60 | % { sleep 1;
# Reconnect the session to a new job object
PS> $jobNew = Receive-PSSession -Session $session -OutTarget Job
PS> $job | Wait-Job | Receive-Job
Output 9
Output 10
Output 11
...
Ebben a példában a feladatok továbbra is egy szülő PowerShell-munkamenethez vannak csatolva.
A szülő munkamenet azonban nem az eredeti PowerShell-munkamenet, ahol Invoke-Command futtatták.