about_Remote_Jobs

Rövid leírás

Ismerteti, hogyan futtathat háttérfeladatokat 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 vagy ThreadJob – 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:

  1. Leválasztott munkamenetekben futó feladatok létrehozásához használható Invoke-Command . Tekintse meg a cikk leválasztott folyamatok szakaszát.
  2. 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.

  1. Enter-PSSession A parancsmaggal interaktív munkamenetet indíthat egy távoli számítógéppel. A ComputerName paraméterrel Enter-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:>
    
  2. 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. A Start-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.

  3. Ha szeretné megtudni, hogy a feladat befejeződött-e, jelenítse meg a $job változó értékét, vagy használja a Get-Job parancsmagot a feladat lekéréséhez. Az alábbi parancs a Get-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).

  4. 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
    
  5. 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>
    
  6. 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 a PsLog.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 a Invoke-Command parancsmag használatával futtatnak egy Get-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.

  1. 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 egy Get-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 amelyet Start-Job visszaad. Mentheti a feladatobjektumot egy változóban, vagy egy Get-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.

  2. 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
    
  3. 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 helyi Receive-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.

  1. Invoke-Command A parancsmaggal parancsot Start-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, a Invoke-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 egy Start-Job parancsot a PSSessionban. A Start-Job parancs és a Get-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, amelyet Start-Job visszaad. Mentheti a feladatobjektumot egy változóban, vagy egy Get-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.

  2. 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-CommandGet-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
    
  3. A feladat eredményeinek lekéréséhez a Invoke-Command parancsmaggal futtasson egy Receive-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éter Receive-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.

Lásd még