about_Remote_Jobs
Rövid leírás
Ismerteti, hogyan futtathat feladatokat távoli számítógépeken.
Részletes 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 folyamaton futnak a helyi gépen. További információkért lásd a feladatokat ismertető szakaszt.PSTaskJob
vagyThreadJob
– 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:
- Leválasztott munkamenetekben futó feladatok létrehozásához használható
Invoke-Command
. Tekintse meg a cikk leválasztott folyamatok szakaszát. - Feladat
Start-Process
helyett új folyamatot hozhat létre. További információ: Start-Process.
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. További információ az interaktív munkamenetekről: about_Remote, és lásd Enter-PSSession
: .
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.
Enter-PSSession
A parancsmaggal interaktív munkamenetet indíthat egy távoli számítógéppel. A ComputerName paraméterrelEnter-PSSession
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 Server01
A 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-Job
parancsmagot. 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-Job
parancsmag egy, a feladatot jelképező objektumot ad vissza.Ez a parancs menti a feladatobjektumot a
$job
vá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
$job
változó értékét, vagy használja aGet-Job
parancsmagot a feladat lekéréséhez. Az alábbi parancs aGet-Job
parancsmaggal 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-Job
kimenet 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-Job
parancsmagot. 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 PsLog.txt fájlba a Server01 számítógépen.Server01\C:> Receive-Job $job > c:\logs\PsLog.txt
Az interaktív munkamenet befejezéséhez használja a
Exit-PSSession
parancsmagot. 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.txt
fájl tartalmát a Server01 számítógépen, indítsa 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.txt
fájlban lévő adatok vizsgálatához és kezeléséhez. További információ a PSSessionsról: about_PSSessions.Az alábbi parancsok a
New-PSSession
parancsmaggal hoznak létre egy , a Server01 számítógéphez csatlakoztatott PSSessiont , és aInvoke-Command
parancsmag használatával futtatnak egyGet-Content
parancsot 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 egy 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. Az 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 az AsJob paraméterrel
Invoke-Command
indít el egy feladatot a Server01 számítógépen. A feladat futtat egyGet-Eventlog
parancsot, 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} -AsJob
A parancs eredményei a következő mintakimenethez hasonlítanak.
SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 1 Job1 Running True Server01 Get-Eventlog system
Az AsJob paraméter használata esetén ugyanazt a feladatobjektumtípust adja vissza,
Invoke-Command
amelyetStart-Job
visszaad. Mentheti a feladatobjektumot egy változóban, vagy egyGet-Job
paranccsal 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 AsJob paraméterével
Invoke-Command
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 parancsot
Get-Job
. Az alábbi parancs lekéri az aktuális munkamenetben elindított összes feladatot.Get-Job
Mivel a távoli feladat az aktuális munkamenetben indult el, egy helyi
Get-Job
parancs 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 system
A feladat eredményeinek lekéréséhez használja a
Receive-Job
parancsmagot. Mivel a feladat eredményei automatikusan visszakerülnek arra a számítógépre, ahol a feladatobjektum található, az eredményeket helyiReceive-Job
paranccsal is lekérheti.Az alábbi parancs a
Receive-Job
parancsmaggal 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.
Invoke-Command
A parancsmaggal parancsotStart-Job
futtathat egy távoli számítógépen.Ehhez a parancshoz PSSession (állandó kapcsolat) szükséges. Ha a ComputerName paraméterrel
Invoke-Command
ideiglenes kapcsolatot hoz létre, aInvoke-Command
parancs a feladatobjektum visszaadásakor teljesnek minősül. Ennek eredményeképpen az ideiglenes kapcsolat bezárul, és a feladat megszakad.Az alábbi parancs a
New-PSSession
parancsmaggal hoz létre egy PSSessiont, amely a Server01 számítógéphez csatlakozik. A parancs menti a PSSessiont a$s
változóban.$s = New-PSSession -computername Server01
A következő parancs a
Invoke-Command
parancsmaggal futtat egyStart-Job
parancsot a PSSessionban. AStart-Job
parancs és aGet-Eventlog
parancs 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 system
Ha távolról futtat egy
Start-Job
parancsot,Invoke-Command
ugyanazt a feladatobjektumtípust adja vissza, amelyetStart-Job
visszaad. Mentheti a feladatobjektumot egy változóban, vagy egyGet-Job
paranccsal 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, futtasson egy
Invoke-Command
Get-Job
parancsot 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 system
A feladat eredményeinek lekéréséhez a
Invoke-Command
parancsmaggal futtasson egyReceive-Job
parancsot a Kiszolgáló01 számítógéphez csatlakoztatott PSSessionban.Az alábbi parancs a
Receive-Job
parancsmaggal 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. A Keep paraméterReceive-Job
használatával 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. Invoke-Command
Feladat indítása 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.