about_Remote_Jobs
Rövid leírás
A háttérfeladatok távoli számítógépeken való futtatását ismerteti.
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 folyamatban 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 elindító szülőmunkamenetet. A remoting réteg azonban többletterhelést okoz, beleértve az objektumszerializálást is. Az összes objektum szerializálva és deszerializálva van, ahogy a szülőmunkamenet és a távoli (feladat-) munkamenet között átadják őket. 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 vihet át a hálózaton.
Fontos
A feladatot létrehozó szülőmunkamenet a feladat állapotát is figyeli, és folyamatadatokat gyűjt. A feladat gyermekfolyamatát a szülőfolyamat leállítja, amint a feladat befejezett állapotba kerül. 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 használatával
Invoke-Command
leválasztott munkamenetekben futó feladatokat hozhat létre. Tekintse meg a cikk leválasztott folyamatok szakaszát. - A használatával
Start-Process
nem feladat, hanem új folyamat 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 a 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ényeit 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
Elindíthat egy interaktív munkamenetet egy távoli számítógéppel, majd elindíthat egy feladatot az interaktív munkamenet során. Az interaktív munkamenetekről további információt a about_Remote és a következő témakörben talál Enter-PSSession
: .
A feladatok interaktív munkamenetben való elindí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éterévelEnter-PSSession
ideiglenes kapcsolatot hozhat létre az interaktív munkamenethez. Vagy a Munkamenet paraméterrel futtathatja az interaktív munkamenetet egy PowerShell-munkamenetben (PSSession).A következő parancs elindít egy interaktív munkamenetet a Server01 számítógépen.
C:\PS> Enter-PSSession -computername Server01
A parancssor úgy változik, hogy ön 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. A következő parancs egy távoli feladatot futtat, amely lekéri az eseményeket a Server01 számítógép Windows PowerShell eseménynaplójában. AStart-Job
parancsmag egy objektumot ad vissza, amely a feladatot jelöli.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 az egyéb 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 meg szeretné tudni, 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. A következő 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 elindult, és ugyanazon a számítógépen fut (ebben az esetben: 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 egy fájlba a távoli számítógépen. A következő 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 Server01 számítógépen található PsLog.txt fájlba.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 újra 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ítson el egy másik interaktív munkamenetet, vagy futtasson egy távoli parancsot. Ez a parancstípus akkor a legjobb, ha PSSession (állandó kapcsolat) környezetben fut, ha több parancsot szeretne használni aPsLog.txt
fá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-PSSession
parancsmaggal hoznak létre egy, a Server01 számítógéphez csatlakoztatott PSSessiont , és aInvoke-Command
parancsmaggal 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 parancseredményeket a helyi számítógépnek, 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 közül sok nem használja a PowerShell-távelérést, így azokat olyan számítógépeken is használhatja, amelyek nincsenek konfigurálva az újraegyenlítésre, és amelyek nem felelnek meg az újraegyenlítés követelményeinek.
A következő parancs a AsJob paraméterével
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énye az alábbi mintakimenethez hasonló.
SessionId Name State HasMoreData Location Command --------- ---- ----- ----------- -------- ------- 1 Job1 Running True Server01 Get-Eventlog system
Az AsJob paraméter használatakor ugyanazt a feladatobjektumtípust adja vissza,
Invoke-Command
amelyetStart-Job
visszaad. A feladatobjektumot mentheti egy változóban, vagy egyGet-Job
paranccsal lekérheti a feladatot.Vegye figyelembe, hogy a Location (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 képviselő feladatobjektum a helyi számítógépen található, nem kell távoli parancsokat futtatnia a feladat kezeléséhez.A feladat befejezésének megállapításához használjon egy parancsot
Get-Job
. A következő 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 feladateredmények automatikusan visszakerülnek arra a számítógépre, ahol a feladatobjektum található, az eredményeket egy helyiReceive-Job
paranccsal szerezheti be.A következő parancs a
Receive-Job
parancsmagot használja a feladat eredményeinek lekéréséhez. A munkamenet-azonosítót használja a feladat azonosításához. 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 parancs eredményeit a távoli számítógépen tárolja, 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.
Amikor távolról futtat egy Start-Job
parancsot, a feladatobjektum létrejön a távoli számítógépen, és a feladateredmények megmaradnak a távoli számítógépen.
A feladat szempontjából minden művelet helyi. Csak távoli parancsokat futtat egy helyi feladat távoli számítógépen való kezeléséhez.
Invoke-Command
A parancsmag használatával parancsotStart-Job
futtathat egy távoli számítógépen.Ehhez a parancshoz PSSession (állandó kapcsolat) szükséges. Ha a ComputerName paraméterét
Invoke-Command
használja egy ideiglenes kapcsolat létrehozásához, aInvoke-Command
parancs a feladatobjektum visszaadásakor befejezettnek minősül. Ennek eredményeképpen az ideiglenes kapcsolat lezárul, és a feladat megszakad.A következő 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 kapcsos zárójelek közé 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 típusú feladatobjektumot adja vissza, amelyetStart-Job
visszaad. Mentheti a feladatobjektumot egy változóba, vagy egyGet-Job
paranccsal lekérheti a feladatot.Vegye figyelembe, hogy a Location (Hely ) tulajdonság értéke azt mutatja, hogy a feladat a helyi számítógépen ,,LocalHost" néven fut, 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 minősül.
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 Server01 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 Server01 számítógéphez csatlakoztatott PSSessionban.A következő parancs a
Receive-Job
parancsmagot használja a feladat eredményeinek lekéréséhez. A munkamenet-azonosítót használja a feladat azonosításához. Ez a parancs menti a feladat eredményeit a$results
változóba. A Keep paramétertReceive-Job
használja az eredmény távoli számítógépen való megőrzéséhez a feladat-gyorsí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. A következő 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 gyermekfolyamatokkal együtt az összes futó gyermekfeladat leáll. A helyi gépen az aktuális PowerShell-munkamenethez nem kapcsolódó feladatokat futtathat újra.
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 visszaküldött adatok azonban elvesznek a munkamenet leállásakor. Az újracsatlakozáskor csak a leválasztást követően létrehozott új adatobjektumok lesznek visszaadva.
# 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.