Névjegyek

Parancsok küldése egy másik powershell konzol -alkalmazásba. Technikák a távoli rendszerekkel való PowerShell -en keresztüli munkavégzéshez. WinRM - Windows távoli kezelés

Gyakran dolgozom parancsokkal távoli rendszereken a PowerShell -en keresztül, mind a behatolási tesztek során, mind a mindennapi feladatokban. A távoli parancsok a WinRM (Windows Remote Management) protokollon keresztül indulnak el, amelyet tudomásom szerint támogat a Windows Vista SP 1, a Windows 7, a Windows Server 2008 és a Windows Server 2012.

Bevezetés

Gyakran dolgozom parancsokkal távoli rendszereken a PowerShell -en keresztül, mind a behatolási tesztek során, mind a mindennapi feladatokban. A távoli parancsok a WinRM (Windows Remote Management) protokollon keresztül indulnak el, amelyet tudomásom szerint támogat a Windows Vista SP 1, a Windows 7, a Windows Server 2008 és a Windows Server 2012.

Kezdeti beállítások

Mielőtt elkezdené a távoli rendszerrel való munkát, be kell fejeznie a beállítást.

1. Indítsa el a PowerShell konzolt rendszergazdaként, és futtassa a következő parancsot:

Enable -PSRemoting -force

A fenti parancs lehetővé teszi a parancsok távoli rendszereken történő futtatását. Ha bármilyen problémája van, használja az alábbi parancsokat:

2. Győződjön meg arról, hogy a WinRM szolgáltatás automatikusan elindul.

# Állítsa be a kívánt üzemmódot

Set -Service WinRM -StartMode Automatic

# Ellenőrizze, hogy a szolgáltatás fut -e

Get -WmiObject -Class win32_szolgáltatás | Hol -objektum ($ _. Névszerű "WinRM")

3. Állítsa az összes gazdagép állapotát "érvényes" értékre (ezt később is megteheti).

# Bízunk minden házigazdában

Állítsa be a WSMan elemet: localhost \ client \ trustedhosts -value *

# Ellenőrizze a megbízható gazdagépek konfigurációját

Get-Item WSMan: \ localhost \ Client \ TrustedHosts

Példák a munkára távoli rendszerek

Egyetlen parancs futtatása távoli rendszeren

Az "Invoke-Command" parancs a parancsok távoli rendszereken történő futtatására szolgál. Dolgozhat jelenlegi felhasználóként, vagy használhat harmadik fél fiókot, ha olyan rendszeren dolgozik, amely nem része a tartománynak:

Invoke -Command -Számítógépnév MyServer1 -ScriptBlock (gazdagépnév)
Invoke -Command -Számítógépnév MyServer1 -Credentials demo \ serveradmin -ScriptBlock (Hostname)

Ha telepítve van az Active Directory -val való munkavégzésre szolgáló modul, lehetségessé válik parancsok futtatása több rendszeren egy csővezeték használatával:

Get -ADComputer -Filter * -tulajdonság neve | válassza a @ (Név = "számítógépnév"; Kifejezés = ($ _. "név")) |
Invoke -Command -ScriptBlock (gazdagépnév)

Néha távoli rendszeren helyileg tárolt szkriptet kell futtatnia:

Invoke -Command -ComputerName MyServer1 -FilePath C: \ pentest \ Invoke -Mimikatz.ps1
Invoke -Command -ComputerName MyServer1 -FilePath C: \ pentest \ Invoke -Mimikatz.ps1 -Credentials demo \ serveradmin

Ha dinamikusan generál parancsokat vagy függvényeket, amelyeket ezután továbbít a távoli rendszernek, használhat egy csomó invoke-kifejezés és invoke-parancs parancsot:

$ MyCommand = "gazdagépnév"
$ MyFunction = "funkció gonosz (write -host`" Getting evil ... `"; iex -command $ MyCommand); gonosz "
invoke -command -ComputerName MyServer1 -Credentials demo \ serveradmin -ScriptBlock
(Invoke -Expression -Command "$ args") -ArgumentList $ MyFunction

Interaktív konzol szervezése távoli rendszeren

Interaktív PowerShell konzolt állíthat be egy távoli rendszeren az "Enter-PsSession" paranccsal (kicsit olyan, mint az SSH). Az "Enter-PsSession" parancs akár az aktuális felhasználóként, akár egy másik fiók használatával fut:

Enter-PsSession –Számítógépnév szerver1.domain.com
Enter-PsSession –Számítógépnév szerver1.domain.com – Hitelesítési adatok \ serveradmin

A munkamenet az "Exit-PsSession" paranccsal zárható le:

Háttér munkamenetek létrehozása

Egy másik hasznos funkció lehetővé teszi a háttér munkamenetek létrehozását (az "Új-PsSession" parancs). A háttérmunkák hasznosak lehetnek, ha több parancsot futtatnak több rendszeren. Az előző parancsokhoz hasonlóan az "Új-PsSession" parancs az aktuális felhasználó nevében vagy egy másik fiók használatával fut:

New -PSSession -Számítógépnév szerver1.domain.com
New-PSSession –Számítógépnév szerver1.domain.com – Hitelesítési adatok \ serveradmin

Ha telepítve van az ActiveDirectory -val való munkavégzéshez szükséges modul, akkor egyszerre több rendszer számára is létrehozható háttér -munkamenetek (ez a trükk végrehajtható különböző utak). Az alábbiakban egy példa látható a háttér munkamenetek létrehozására a tartomány összes rendszeréhez. A példában a munkamenetek nem tartományi rendszeren jönnek létre alternatív tartományfiók használatával.

New -PSDrive -PSProvider ActiveDirectory -Name RemoteADS -Root "
"-Kiszolgáló a.b.c.d -hitelesítési tartomány \ felhasználó
cd RemoteADS:
Get -ADComputer -Filter * -Tulajdonság neve | válassza a @ lehetőséget (Name = "ComputerName"; Expression = ($ _. "name"))
| Új PSSession

Háttér munkamenetek felsorolása

Miután több háttérmunkát létrehozott, megtekintheti azok listáját a "Get-PsSession" paranccsal.

Interakció a háttértanulmányokkal

Eleinte hasonló érzésem támadt, mint a MetaSploit munkamenetekben. A PowerShell háttérmunkái azonban valamivel stabilabbak. A munkamenet -azonosító használatával végzett interakcióra példa az alábbiakban látható:

Enter-PsSession –id 3

A munkamenetből való kilépéshez használja az "Exit-PsSession" parancsot. Az ülés visszatér a háttérbe.

Parancsok futtatása a háttérben

Ha az összes aktív munkamenetben végrehajtani szeretné a parancsot, használjon egy csomó "Invoke-Command" és "Get-PsSession" parancsot.

Invoke -Command -Session (Get -PSSession) -ScriptBlock (Hostname)

Háttér munkamenetek eltávolítása

Az összes aktív munkamenet eltávolításához használja a "Disconnect-PsSession" parancsot

Get-PSSession | Disconnect-PSSession

Következtetés

A PowerShell távoli parancsai óriási lehetőségeket nyitnak meg a rendszergazdák és a behatolási teszterek számára. A helyzettől függetlenül a távoli rendszerekkel való együttműködés módja a következő:

  • Az Invoke-Command használatával egyetlen parancsot futtathat egy távoli rendszeren.
  • Az Enter-PSSession használatával egyetlen rendszerrel léphet kapcsolatba.
  • Ha több parancsot szeretne futtatni több rendszeren, használjon háttér -munkameneteket.

Remélem, hasznosnak találta ezt a cikket.

2011. 03. 04. Bill Stewart

V Windows verziók A PowerShell 2.0 alternatív mechanizmust valósít meg a távoli számítógépekhez való csatlakozáshoz, az úgynevezett távvezérlés. Ez a mechanizmus használja a szolgáltatás lehetőségeit távirányító Windows (Windows Remote Management, WinRM). Csatlakoztatható egy távoli számítógéppel, valamint elindítja az adott távoli számítógépen végrehajtott parancsokat

A PowerShell 1.0 fejlesztése valódi áttörést jelentett a Windows XP és a Windows operációs rendszer platform későbbi verzióinak felügyeleti és automatizálási eszközeiben. Platform-alapú. NET Framework A PowerShell 1.0 technológia egységes parancsstruktúrát (parancsmagokat) tartalmaz, erőteljes beépített kimeneti formázó eszközökkel rendelkezik, és jelentősen növeli más technológiák, és mindenekelőtt a Windows Management Instrumentation (WMI) elérhetőségét. Azonban, bár némi összetett PowerShell parancsok 1.0 és objektumok. A NET csatlakozhat távoli számítógépekhez, ez a funkció az adott esettől függően eltérő módon valósul meg. A távoli kapcsolatokat támogató parancsok rendelkeznek a -ComputerName paraméterrel; vagy távoli eljáráshívásokat (RPC) vagy DCOM -t használnak a kapcsolatok létrehozásához.

Sok esetben az RPC és a DCOM jó munkát végez a menedzsmentben, de néha problémák merülnek fel a diagnosztika elvégzésekor és a problémák kiváltó okának azonosításakor. Például a Get -Service parancs a távoli számítógépről a szolgáltatási adatokat olvashatja be a -ComputerName paraméterrel, de ez a parancs nem rendelkezik -Credential paraméterrel, ezért olyan fiókkal kell bejelentkezni, amely rendelkezik hozzáféréssel a távoli rendszerhez hogy végrehajtsák.

A Windows PowerShell 2.0 azonban bevezet egy alternatív mechanizmust a távoli számítógépekhez való csatlakozáshoz, az úgynevezett távoli. Ez a mechanizmus a Windows Remote Management (WinRM) szolgáltatás eszközeit használja. Csatlakoztatható egy távoli számítógéppel, valamint elindítja az adott távoli számítógépen végrehajtott parancsokat. Hadd magyarázzam el ezt egy példával. A Távoli asztali csatlakozók grafikus felhasználói felületre utal ugyanúgy, mint a távirányítás a PowerShell parancssorra. Ha összetett parancsot futtat távvezérléssel, a parancs ténylegesen végrehajtódik a távoli gépen, de az eredményeket a helyi gépen láthatja.

Hol szerezhető be a Windows PowerShell 2.0

A PowerShell 2.0 és a WinRM a Windows 7 és a Windows Server 2008 R2 része, így ha ezeket az operációs rendszereket használja, akkor nem kell telepítenie ezeket az összetevőket. Ha vele dolgozik Windows rendszerek Vista SP2, Windows XP SP3, Windows Server 2008 SP2 vagy Windows Server 2003 SP2 esetén le kell töltenie és telepítenie kell Windows csomag Management Framework Core (support.microsoft.com/kb/968930).

Távoli funkció engedélyezése

Annak érdekében, hogy a számítógép kapcsolatot létesítsen a PowerShellt telepítő távoli rendszerekkel, az alábbi feltételeknek kell teljesülniük.

  1. A WinRM szolgáltatást aktiválni kell.
  2. Olyan WinRM figyelőt kell telepíteni, amely elfogadja a kapcsolatokat egy vagy több IP -címről.
  3. Tűzfal A Windows rendszert úgy kell konfigurálni, hogy képes legyen kapcsolatot létesíteni a WinRM -en keresztül.
  4. A PowerShell -munkamenetet engedélyezni és megfelelően konfigurálni kell.

Ha a számítógép nem fogadja a távoli számítógépekre telepített PowerShells kapcsolatokat, futtassa meghatározott feltételek nem szükséges.

Annak érdekében, hogy a felhasználók a lehető leghamarabb elkezdhessék a munkát, a Microsoft PowerShell fejlesztői létrehozták az Enable-PSRemoting parancsot ezeknek az összetevőknek az automatikus konfigurálásához. Ezt a beállítást nem azon a gépen kell elvégezni, amellyel távolról interakcióba lép, hanem azon a számítógépen, amelyet távolról fog elérni. Az Enable-PSRemoting parancs csak akkor futtatható, ha a PowerShell rendszergazdaként fut. Ha velük dolgozik Windows gépek Vista, Server 2008 és újabb verziók esetén kattintson a jobb gombbal a PowerShell ikonra, és válassza a Futtatás rendszergazdaként lehetőséget a legördülő menüből. Ha az Enable -PSRemoting parancsot a -Force paraméterrel futtatja, akkor a rendszer nem kér engedélyt az egyes konfigurációs lépések végrehajtásához, amikor azok végrehajtásra kerülnek. Ha többet szeretne megtudni az Enable-PSRemoting összetett parancsról, futtassa a parancsot

Get-Help Enable-PSRemoting

Egy parancs végrehajtása egy távoli számítógépen

A PowerShellhez való távoli számítógépen a legegyszerűbben az Enter-PSSession paranccsal lehet csatlakozni. Alapértelmezés szerint ez a parancs a -ComputerName paraméterrel fut, így ezt a paramétert nem kell megadni, amikor a billentyűzetről írja be. Például a rigel nevű távoli számítógéppel való kapcsolat létrehozásához írja be a billentyűzetről

PS C: \> Enter-PSSession rigel

Vegye figyelembe, hogy a teljesség kedvéért egy meghívót is beleírok a szövegbe. A parancs részeként nem kell megadnia a parancssort.

Miután belépett egy távoli munkamenetbe, megváltozik a PowerShell prompt szintaxisa. Ez most szögletes zárójelben tartalmazza a távoli számítógép nevét; ez azt jelenti, hogy létrejött a kapcsolat a távoli számítógéppel. Ebben az esetben a meghívó így néz ki:

: PS C: \>

Megalkotása után távoli kapcsolat a parancssorban megadott összes parancs végrehajtásra kerül a távoli gépen. Tehát ha beírod a parancsot

: PS C: \> Get-ChildI C elem: \

a Get-ChildItem parancs a távoli gépen lesz végrehajtva. A kimenet tartalmazza a távoli számítógép C meghajtóján tárolt fájlok és mappák nevét. A távoli munkamenet befejezéséhez használja az Exit-PSSession parancsot

: PS C: \> Kilépés-PSSession

Scriptblock végrehajtása távoli számítógépen

A PowerShell távirányítással parancsfájlblokkot vagy scriptblokkot (azaz göndör zárójelek közé helyezett PowerShell -kódblokkot) futtathat egy távoli számítógépen. Ehhez használja az Invoke -Command parancsot a -ComputerName paraméterrel. Például az 1. ábrán látható parancsban az Invoke-Command parancsot használtam a Get-ChildItem végrehajtásához egy távoli számítógépen. Az 1. ábra áttekintésekor vegye figyelembe, hogy nem használtam az Enter-PSSession parancsot a kapcsolat létrehozásához a távoli számítógéppel a szkriptblokk futtatása előtt. Az Enter-PSSession és az Invoke-Command két különböző távoli módszer.

Az Invoke -Command első paramétere a -ScriptBlock paraméter; a végrehajtásra készülő kódra mutat. Az 1. ábrán kihagytam a -ScriptBlock paraméter nevét, mert nem kötelező. A -ComputerName paraméter tartalmazza a távoli számítógép nevét. Amint a Get-ChildItem parancs kimenetén látható, a PowerShell még a távoli számítógép nevét is felsorolja a kimenet PSComputerName oszlopában a kezelői kényelem érdekében.

Szkriptblokk végrehajtása több távoli számítógépen

A szkriptblokk több távoli számítógépen is végrehajtható. Ezt egy-sok konfigurációnak vagy gördülő telepítésnek nevezik. Az 1. ábrán az Invoke -Command -ComputerName paramétere egyetlen nevet tartalmaz, de több számítógépnevet is megadhat. Tehát a parancs

PS C: \> Invoke-Command (Get-ChildItem env: co *)-Számítógép titán, rigel

lehetővé teszi a Get-ChildItem parancs futtatását két távoli számítógépen. A cikk szövegében ez a parancs több sorra van bontva, de PowerShell konzol egy sorba kell beírni. Ugyanez vonatkozik más parancsokra is, amelyek több sorra vannak felosztva. Az 1. ábrához hasonlóan a kimenet PSComputerName oszlopa tartalmazza a számítógépeket.

Szkriptblokk végrehajtása a háttérben

A PowerShell 2.0 háttérmunkákat biztosít, ami azt jelenti, hogy az operátor parancsot futtathat a háttérben. Ez a funkció akkor hasznos, ha olyan parancsokat futtat, amelyek végrehajtása sokáig tart.

A Start-Job parancs segítségével háttérmunkát indíthat a helyi számítógépen. De azt kell mondanom, hogy ennek a parancsnak nincs -ComputerName paramétere, ami azt jelenti, hogy nem használható háttérmunka végrehajtására egy távoli gépen. Ehelyett az Invoke -Command parancsot kell futtatnia a -AsJob paraméterrel. Például a 2. ábra felső parancsa kezdeményezi a szkriptblokkot háttérmunkaként a titan távoli számítógépen. Miután megadtam ezt a parancsot, a képernyő azonnal megjelent a képernyőn: A PowerShell parancsfájlblokkot küldött végrehajtásra a távoli számítógépre, majd visszaadta nekem az irányítást. A figyelmeztetés azt állítja, hogy a végrehajtott parancs nem fért el a konzol ablakában, és ezért nem szerepelt a kimenetben. Ha szélesebb konzolablakom lenne, a PowerShell formázó a parancsot tartalmazza a kimenetben. Az Id és Név oszlopok jelzik a feladatot (azonosítója és baráti neve), az Állapot oszlop pedig azt jelzi, hogy a munka folyamatban van, szüneteltetett vagy befejezett. A HasMoreData oszlop olyan információkat tartalmaz, amelyek azt jelzik, hogy egy adott feladathoz tartozó összes adatot lekérték, vagy hogy a job több lekérendő információt tartalmaz.

A Get-Job parancs futtatásával megállapíthatja, hogy egy háttérmunka befejeződött-e, amint azt a 2. ábra második parancsa is mutatja. Ha nem használ paramétereket, a Get-Job ellenőrzi az aktuális munkamenetben futó összes job állapotát . Ha egyszerre több feladat is fut, akkor az -Id vagy -Name beállításokkal megadhatja, hogy melyik feladatot szeretné ellenőrizni. Amikor a háttérmunka befejeződött, a kimenet állapot oszlopa befejeződik.

A Fogadás-feladat parancs használatával olvashatja a háttérmunka eredményeit. Ez a parancs a Get-Job parancshoz hasonlóan az aktuális munkamenetben megkezdett összes feladat kimenetét adja vissza, kivéve, ha egy paraméterrel jelezte, hogy melyik feladat érdekli Önt. Például a 2. ábra utolsó parancsa tartalmazza a -Id paramétert, amely azt jelzi, hogy a 9. feladat azonosítójának kimenetét szeretné. A -Id paraméter nevét kihagytam, mert az opcionális. A 3. ábra a kimenet utolsó sorait mutatja a kérdéses távoli háttérmunka végrehajtásával kapcsolatban.

PowerShell -munkamenetek létrehozása

A fenti példák bemutatják, hogyan érheti el a PowerShell parancssort egy távoli gépen, és hogyan hajthat végre parancsokat távoli számítógépeken. De még nem említettem, hogy a távirányítás mindig a munkamenet keretében történik. Mondjuk egy munkamenet a PowerShell otthona. Amikor megnyit egy PowerShell Console ablakot vagy PowerShell Integrated Scripting Environment (ISE) ablakot, munkamenetet hoz létre. Távirányítás nélkül minden munkamenet a helyi számítógépen fut, és független egymástól. A fenti távoli példák mindegyike ideiglenes munkameneteket hoz létre, amelyek automatikusan befejeződnek a távoli távozás végén. Ezenkívül lehetőség van a távoli munkamenetek példányosítására és újrafelhasználására. Ez a megközelítés sokkal hatékonyabb, ha többször kell hozzáférnie a távoli számítógépekhez.

Új munkamenetek létrehozásához használja a New -PSSession parancsot a -ComputerName paraméterrel. Ennek a paraméternek a neve elhagyható a parancsokban. Tehát a parancs

C: \> $ session = New-PSSession phineas, ferb, perry

három munkamenetet hoz létre három phineas, ferb és perry nevű számítógépen. Ezeket a munkameneteket a $ session változó létrehozásával tekintheti meg. Ehhez írja be a nevet a parancssorba

$ munkamenet

és nyomja meg az enter billentyűt. Az Invoke-Command -Session paramétere támogatja a New-PSSession paranccsal létrehozott munkamenet-objektumokat, így használhatja a következő parancsokat:

C: \> Invoke-Command (Get-ChildItem) munkamenet $ munkamenetek

Ez a parancs futtatja a Get-ChildItem parancsot a phineas, ferb és perry gépeken, de nem szakítja meg a kapcsolatot. Hozzáadhatja a -AsJob paramétert, és végrehajthatja a parancsot a háttérben:

C: \> Invoke -Command (Get -ChildItem) -session $ session -asjob

Új megközelítés a munkához

A PowerShell távirányítás egy hatékony új mechanizmus a parancsok távoli számítógépeken történő végrehajtására. Remélem, ez a cikk motiválja Önt új lehetőségek felfedezésére. A távirányítással kapcsolatos részletesebb információk, beleértve a diagnosztikai problémákat is, megtalálhatók a PowerShell referencia témaköreiben a távoli szolgáltatásról a technet.microsoft.com/en-us/library/dd347616.aspx címen.

Bill Stewart ( [e -mail védett]) - Rendszer- és hálózati rendszergazda a French Mortuary -ban, Új -Mexikóban



Távoli kezelés a PowerShell használatával

A távoli számítógépekkel való munkavégzéshez számos módszer létezik. Van Windows Management Műszerezés (WMI), széles körben használt VBScript. Különféle segédprogramok teszik lehetővé a távvezérlést, például a Sysinternals szolgáltatásai. Még sok PowerShell -parancsmag is rendelkezik ComputerName paraméterrel távoli számítógépeken.

Általában sok módszer létezik, de mindegyiknek megvan a maga hátránya. Először is, a szintaxis más, ami könnyen összetéveszthető. Másodszor, néhány parancs eltérően viselkedik attól függően, hogy helyileg vagy távolról hajtják végre őket. Végül a kommunikációhoz szükség lehet további portok megnyitására a tűzfalon, ami biztonsági szempontból nem jó.

PowerShell távirányító megoldja a leírt problémák nagy részét. Ez a Microsoft által a Web Services for Management (WS-Management) protokoll megvalósításán alapul, és egy kommunikációs szolgáltatást (WinRM) használ. A számítógépek közötti kommunikáció HTTP (alapértelmezett) vagy HTTPS protokollon keresztül történik. A két számítógép közötti összes forgalom protokoll szinten titkosítva van (kivéve SSL használata esetén). Számos hitelesítési módszer támogatott, köztük az NTLM és a Kerberos.

A különböző programozási felületeket használó segédprogramokkal ellentétben a PS Remoting a következőképpen működik: a helyi számítógépen megadott parancsokat továbbítja a távoli számítógépre, és ott végrehajtja, majd az eredményt visszaküldi. Mivel minden parancsot helyben hajtanak végre, nem kell aggódnia a kompatibilitás miatt. Ezenkívül a PS Remoting csak egy kell nyitott port a tűzfalon.

A PowerShell Remoting használatával többféle módon kezelheti.

Egy-egy vezérlés

A távvezérlés legegyszerűbb módja az interaktív megnyitás távoli munkamenetés végezze el a szükséges műveleteket benne. Például nyissunk meg egy munkamenetet az SRV4 számítógépen, és indítsuk újra a nyomtatási szolgáltatást rajta:

Enter -PSSession -ComputerName SRV4
Restart -Service -Name spooler

Lássuk a szolgáltatás állapotát, és zárjuk be a távoli munkamenetet:

Get -Service -Name spooler
Kilépés-PSSession

Az interaktív munka alkalmas a megoldásra egyszerű feladatok távoli ügyintézés. Ha automatizálnia kell a folyamatot, akkor jobb az Invoke-Command parancsmag használata. Így teheti meg ugyanazt a műveletet vele:

Invoke -Command -ScriptBlock (Restart -Service spooler) -ComputerName SRV4

Ez a parancs megnyit egy távoli munkamenetet az SRV4 -en, végrehajtja a -ScriptBlock paraméterben megadott parancsblokkot, és bezárja a munkamenetet. A feladat háttérben történő futtatásához opcionálisan megadhatja a -AsJob paramétert.

Ne feledje, hogy a háttérben futáskor a PowerShell nem ad vissza eredményt. Ennek megszerzéséhez a Fogadás-feladat parancsmagot kell használnia.

Annak érdekében, hogy ne néhány parancsot, hanem egy szkriptet hajtson végre, az Invoke-Command rendelkezik egy –FilePath paraméterrel, amelyet a –ScriptBlock helyett lehet használni egy szkriptfájl meghatározásához. Példaként létrehoztam egy szkriptet, amely felsorolja a leállított szolgáltatásokat, és futtatta egy távoli SRV4 gépen:

Invoke -Command -FilePath. \ Script.ps1 -ComputerName SRV4

Egy-több menedzsment

Gyakran szükségessé válik egy feladat párhuzamos végrehajtása több számítógépen. Ez könnyen elvégezhető ugyanazzal az Invoke-Command használatával. Például a számítógépek nevei egyszerűen felsorolhatók, vesszővel elválasztva:

Invoke -Command -ScriptBlock (Restart -Service spooler) -ComputerName SRV4, SRV5

Hely a változóban:

$ szerverek = @ (″ SRV1 ″, ″ SRV2 ″, ″ SRV3 ″)
Invoke -Command -ScriptBlock (Restart -Service spooler) -ComputerName $ szerverek

Vagy vegye ki a fájlból:

Invoke -Command -ScriptBlock (Restart -Service spooler) -ComputerName`
(Get-Content. \ Servers.txt)

Jegyzet: Az Invoke-Command ThrottleLimit paraméterkorlátozással rendelkezik maximális összeg számítógépek, amelyek egyidejűleg vezérelhetők. Alapértelmezés szerint ez a paraméter 32. Szükség esetén módosíthatja, de vegye figyelembe, hogy ennek a paraméternek a növelése növeli a számítógép processzorának és memóriájának terhelését, ezért ezt a műveletet nagyon óvatosan kell végrehajtani.

Ülések

Minden alkalommal, amikor végrehajtja az Invoke-Command programot, új munkamenet jön létre, amelynek létrehozása időt és erőforrásokat igényel. Ennek elkerülése érdekében megnyithatunk egy munkamenetet, amelyben végrehajthatjuk az összes parancsot. Például nyissunk meg egy SRV4 nevű munkamenetet az SRV4 számítógépen, és tegyük be a $ session változóba, majd ez a munkamenet elvégzi a feladatunkat (állítsa le a hosszú szenvedésű sorkezelőt):

$ session = New -PSSession -ComputerName SRV4 -Name SRV4
Invoke-Command -ScriptBlock (Get-Service spooler | Stop-Service) `
-Session $ session

A munkamenet aktív lesz, amíg ki nem lépünk a PowerShell konzolból. A munkamenetet is bezárhatja - Disconnect -PSSession vagy delete - Remove -PSSession.

Most néhány érdekes funkciót mutatunk be a PowerShell 3.0 -ban. Ha korábban, amikor kilép a munkamenetből vagy bezárja a konzolt, a munkamenet törlődött, akkor a PS 3.0 -ban a munkamenet bezárásakor az állapotba kerül szétkapcsolt... Megnyithatunk egy új munkamenetet ugyanazon (vagy bármely más) számítógépen, és végre tudjuk hajtani a parancsot ebben a leválasztott munkamenetben. Például elindítjuk a nyomtatási szolgáltatást az SRV4 számítógépen, amelyet legutóbb leállítottunk:

Invoke-Command -ScriptBlock (Start-Service spooler) `
-Számítógépnév SRV4 -Nincs kapcsolat

A leválasztott munkamenetek használatának másik lehetősége az időigényes feladatok elindítása. Nyissuk meg például a LongJob nevű munkamenetet az SRV4 -en, és indítsunk el benne egy háttérmunkát, amely 1 perces időközönként megjeleníti a szolgáltatások listáját:

$ session = New -PSSession -ComputerName SRV4 -Name LongJob
Invoke -Command -Session $ session -ScriptBlock`
(Get -Service | foreach ($ _; alvás 60)) -AsJob

Lássuk, hogyan történik a feladat, és zárjuk le a munkamenetet:

Fogadás -feladat -Név Munka2
Disconnect-PSSession $ session

Megyünk egy másik számítógéphez, és megnyitjuk a konzolt, Csatlakozzunk a LongJob munkamenethez, és a Receive-PSSession parancsmagot használva kapjuk meg a feladat eredményét:

Connect -PSSession -Name LongJob -ComputerName SRV4
Receive -PSSession -Name LongJob

Vagy egy másik lehetőség, anélkül, hogy kifejezetten csatlakozna a munkamenethez a Connect-PSSession használatával:

$ session = Get -PSSession -Name LongJob -ComputerName SRV4
$ job = Receive -PSSession $ session -OutTarget Job
Vétel-Job $ állás

Jegyzet: Ahhoz, hogy az eredmény a rendszerben maradjon, a Receive -Job funkciót kell használni a -Keep paraméterrel.

Implicit távirányító

Egy másik, meglehetősen szokatlan módszer a távvezérlés az implicit távvezérlés. Segítségével helyileg futtathatja a távoli számítógépen található parancsmagokat távoli munkamenet létrehozása nélkül.

Vegyünk például egy normál munkaállomást telepített távoli felügyeleti eszközök nélkül. Hozzon létre egy távoli munkamenetet az SRV4 tartományvezérlővel, és importálja a modult ebbe a munkamenetbe Active Directory:

$ session = New -PSSession -ComputerName SRV4
Invoke-Command (Import-Module ActiveDirectory) -Session $ munkamenet

Ezután exportáljuk az Active Directory -parancsmagokat a távoli munkamenetből, és elhelyezzük őket a helyi RemoteAD modulban:

Export -PSSession -Session $ session -CommandName * -AD * -OutputModule RemoteAD`
-AllowClobber

Ez a parancs új PowerShell modult hoz létre a WindowsPowerShell \ Modules \ RemoteAD mappában. Csak a * -AD * mintának megfelelő nevű parancsmagok töltődnek be. Maguk a parancsmagok azonban nem másolódnak ide helyi számítógép... A helyi modul egyfajta parancsikonként szolgál, és a parancsokat a távoli tartományvezérlőn hajtják végre.

A modul létrehozása után a távoli munkamenet bezárható, már nincs rá szükség.

Importáljuk az új modult az aktuális munkamenetbe (a PS 3.0 -ban ezt a lépést kihagyhatja):

Import-Module RemoteAD

Most figyelem - nem nyitunk távoli munkamenetet a tartományvezérlővel, ahol a parancsmagok találhatók. Nem kell kifejezetten elkezdenie ezt a munkamenetet - megtehető hallgatólagosan távoli parancsmagok futtatásával:

New -ADUser -Name BillGates -Társaság Microsoft
Get-ADUser BillGates

Ez visszaállítja a távoli kapcsolatot a tartományvezérlővel, majd a parancsot elküldi a tartományvezérlőnek, és ott végrehajtja. A végrehajtás eredményét sorba rendezik az XML -be, és a hálózaton keresztül továbbítják a helyi számítógépre, ahol deserializálják azokat az objektumokat, amelyekkel a PowerShell tud dolgozni.

A távoli munkamenet aktív marad mindaddig, amíg be nem zárja a konzolt vagy eltávolítja a RemoteAD modult.

Az implicit távirányító lehetővé teszi, hogy a parancsmagokkal egy távoli számítógépen ugyanúgy dolgozzon, mintha azokat a helyi gépre telepítették volna. Ugyanakkor minden szükséges parancsmag mindig kéznél van, ami nagyon kényelmes.

Végezetül elmondom, hogy jelenleg a PowerShell Remoting a Windows operációs rendszerek távoli felügyeletének fő eszköze. Ezért minden Windows -rendszergazdának tudnia kell képességeiről és képesnek kell lennie arra, hogy ezeket használja.

Ez a cikk részletesen elmagyarázza a PowerShell 2.0 használatával történő távoli távozás témáját. Először is el kell indítanunk azt a szolgáltatást, amellyel távoli interakciót hajtunk végre.

Elindítjuk a WinRm szolgáltatást
A távirányításhoz a PowerShell 2.0 a WinRM szolgáltatást használja, amely alapértelmezés szerint előre telepítve van a Windows 7 és a Windows 2008 R2 rendszerre. Többért korai verziók operációs rendszer kiegészítőleg kell telepíteni. A megadott szolgáltatás telepítve van a gépre, amikor a PowerShell telepítése 2.0. A WinRM jelenlétének ellenőrzéséhez indítsa el a PowerShell 2.0 konzolt, és futtassa benne a parancsot:
Get-Service WinRm
Az eredmény így fog kinézni:

Állapotnév Megjelenítési név ------ ---- ----------- Leállított winrm Windows távoli kezelés (WS-Manag ...

Mint látható, a szolgáltatás jelen van, de nem indult el. A WinRm elindításához futtassa a parancsot a PowerShell 2.0 konzolról rendszergazdai jogokkal:
Enable-PSRemoting
A szolgáltatás indításának megerősítésére vonatkozó kérésre nyomja meg az "Y" gombot. A WinRM szolgáltatás most "Automatikus" indítási típusra van állítva; minden alkalommal elindul, amikor a számítógép elindul. Az Enable-PSRemoting parancs nem csak elindítja a szolgáltatást, és megváltoztatja az indítási típust, hanem a tűzfalat is megfelelően konfigurálja, hogy megfelelően működjön. A WinRm szolgáltatás bármilyen IP -címről fogad kéréseket.

Az összes kapcsolódó szolgáltató nevét kérjük:
Get-PSProvider
Amint láthatja, most van egy másik szolgáltatónk, a WSMan.
Megbízható csomópontok hozzárendelése

A PowerShell 2.0 konzolon futtassa a parancsokat rendszergazdai jogokkal:

Set-Location –Path WSMan: Set-Location –Path localhost \ client Get-ChildItem

jegyzet
Ne feledje, hogy az első parancsban a –Path paraméter értéke kettősponttal végződik, mert ez egy szolgáltató.

A számítógépen, amellyel távolról szeretne dolgozni, meg kell adnia, hogy mely kiszolgálók csatlakozhatnak ehhez a géphez. Az ilyen szervereket "megbízható webhelyeknek" nevezik. Ha tehát a "MyServer" szerveren tartózkodik, akkor mielőtt a "MyComputer" számítógéppel távolról dolgozhat, konfigurálnia kell a megbízható állomásokat (TrustedHosts). A megbízható webhelyek hozzárendelésének alábbi módszere akkor használatos, ha a számítógép nem tagja az Active Directory tartománynak. Ha a számítógép egy Active Directory tartomány tagja, akkor a TrustedHosts beállításai a csoportházirend segítségével konfigurálhatók.

Fontos!
Az alábbi parancs nem működik, ha a WSMan: \ localhost \ client nincs telepítve az aktuális könyvtárba (lásd a fenti parancshívást).

Set-Item TrustedHosts *

Futtathatja a parancsot egy másik könyvtárból, de akkor meg kell adnia a TrustedHosts teljes elérési útját:

Set WSMan: \ localhost \ Client \ TrustedHosts *

A megerősítési kérelemben nyomja meg az "Y" gombot.

Annak érdekében, hogy a PowerShell láthassa a TrustedHosts beállításaiban végrehajtott módosításokat, újra kell indítania a WSMan szolgáltatást. Ez a következő paranccsal történik:
Restart-Service winrm

Hasonló művelet hajtható végre DOS alatt. Futtassa a winrm -? Parancsot. Látni fogja a parancs általános segítségét. A TrustedHosts aktuális értékének megtekintéséhez futtassa a következő parancsot:

winrm get winrm / config / client

és az érték beállításához futtassa:

winrm set winrm / config / client / @ (TrustedHosts = "*")

A fenti parancsokban a TrustedHosts esetében a "*" szimbólum volt megadva értékként, azonban ehelyett megadhatja az egyes kiszolgálók nevét. A TrustedHosts kezelése klasszikus eset a PowerShell Get and Set igék együttes használatához: a Get-Item és a Set-Item elemeket használja.
Távoli PowerShell 2.0 munkamenet létrehozása és befejezése
Az alábbi parancsokban az „IpAddress” helyett adja meg a kívánt IP -címet, az „FQDN” helyett pedig a teljesen minősített tartománynevet:

Enter-PSSession IpAddress

Enter-PSSession FQDN

A távoli munkamenet befejezéséhez futtassa a következő parancsot:

Az Enter-PSSession parancshoz teljesen minősített tartománynévre van szükség. Például a MyServer.domain.local esetében a MyServer egyszerű megadása nem működne, de az IP -cím használata mindig jól működik az ilyen helyzetekben. Alternatív PSSession módszer:

New-PSSession -computername testMachine2 Get-PSSession

Ezt a munkamenetet így fejezheti be:

Get-PSSession | remove-PSSession

Ha tesztelni szeretné a távmunkát, de nincs második gépe, akkor hozzon létre egy "távoli kapcsolatot" a számítógépről önmagához. Például, ha a gép neve "MyMachine", próbálja meg ezt:

Új -PSSession -számítógép MyMachine

Lehet, hogy furcsának és nem logikusnak tűnik számodra, de így még kipróbálhatod a távoli munkát a PowerShell 2.0 -ban.

Munka távoli PowerShell 2.0 munkamenetben
A távoli kapcsolat létrehozása után a PowerShell 2.0 konzolon futtatva rendezheti a parancscsöveket, de ugyanakkor végrehajtásra kerülnek a távoli gépen, mintha a billentyűzeténél lenne, és ott írja be a parancsokat, nem itt. Például futtasson egy ilyen parancsot, és nézze meg munkájának eredményét:

Hely beállítása c: \ | Gyere el

Mivel ennek az oktatóanyagnak a fő célja, hogy segítsen létrehozni egy PowerShell 2.0 távoli kapcsolati munkamenetet, és megmutatja, hogyan kell lezárni azt, Önnek kell eldöntenie, hogy milyen műveleteket kíván végrehajtani a távoli kapcsolat során.

jegyzet
Ha úgy gondolja, hogy néhány parancs nem működik a távoli kapcsolódási munkamenetben, először tesztelje a helyi gépen.

Amint a távoli kapcsolat az Ön számára működik, azonnal lehetővé teszi a PowerShell 2.0 használatát a hálózathoz csatlakoztatott számítógépek kezelésére. Mostantól más gépeken is futtathat szkripteket. A PowerShell 2.0-ban sok parancsmag támogatja a "-computerName" paramétert, de a távoli kapcsolat lehetővé teszi a PSSession családi parancsok használatát, valamint az Invoke-Command meghívását (vagyis bármit megtehet, amit akar).

PowerShell 2.0 távoli problémák hibaelhárítása

Az egyik gyakori probléma a "Hozzáférés megtagadva" HIBA.

Megoldás:
Futtassa a PowerShell 2.0 -t rendszergazdaként. Próbálja ki mindkét gépen (amelyhez csatlakozik, és amelyhez csatlakozik), és állítsa a "TrustedHosts" beállítást * (csillag) értékre. Ne feledje, hogy ez az opció lehetővé teszi a kapcsolatokat bárhonnan.
Ne felejtse el újraindítani a WinRm szolgáltatást, különben a "TrustedHosts" -on végrehajtott módosítások nem lépnek érvénybe. A szolgáltatás újraindításához futtassa a parancsot a PowerShell 2.0 konzolon: Restart-Service WinRm
Ezenkívül ügyeljen arra, hogy ne keverje össze a WSMan szolgáltató nevét a WinRm szolgáltatásnévvel.
Egy másik furcsa, de néha hasznos tanács: Próbálja újra megpróbálni a távoli kapcsolatot. Furcsa módon lehet, hogy első próbálkozáskor nem működik, de másodszor vagy harmadszor is. Azok. újra kell futtatnia a parancsot: Enter -PSSession -computerName myOtherMachineName

A tűzfalak, a PowerShell 2.0 és az rpc szerver nem érhető el
A biztonsági szakemberek rémülten emelik fel a kezüket egy ilyen javaslatra, azonban a fenti hiba esetén azt javaslom, hogy tiltsa le a tűzfalat mindkét számítógépen. Ha a leállítás után minden rendben működik, akkor ellenőriznie kell a 135 -ös és a 445 -ös port használatát. Állítson be kivételeket ezekre a portokra a tűzfalakban - ez lehetővé teszi a PowerShell 2.0 távoli működését, ugyanakkor a tűzfal megvédi a számítógépet a fenyegetések.

P.S. Olvastam, hogy az Enable-PSRemoting parancsnak át kell vennie a tűzfal beállításainak automatikus módosítását, de tapasztalataim szerint ez nem mindig van így.
A tűzfal Windows 8 -as csoportházirend használatával történő letiltásáról a következő helyen olvashat:

Két típus használható távoli munkához a PowerShell 2.0 -ban
Itt az ideje bejelenteni, hogy a PowerShell 2.0 -ban két lehetőség van a távmunkára.
Az első módszer egy kifinomultabb változat, amely a cmdlet parancsokat használva hozza létre a tartós csövet a második géphez. Az ilyen parancsok nevei a "PSSession" szót tartalmazzák főnévként (ne feledje, hogy a parancsmagok neve az "Ige-főnév" szabály szerint épül fel). A cmdletek listáját a következő paranccsal szerezheti be:

Get -Command -név PSSession

A második módszer a PowerShell 2.0 távoli munka kanonikusabb formája is. Ez a módszer egyszerűen kiterjeszti a helyi parancsokat a "-computerName" paraméter hozzáadásával, amely meghatározza azt a távoli számítógépet, amelyen a műveletet végre kell hajtani. Ennek eredményeként az ilyen parancsok a hálózat másik gépén futnak:

Get -Process -comPuterName machine2

Az így használható parancsmagok listája egyszerű módon(azaz azok, amelyek rendelkeznek a "-computerName" paraméterrel) a következő paranccsal szerezhetők be:

Get-command | ahol ($ _. parameter.keys -tartalmazza a "ComputerName" nevet)

A második módon működő parancsmagok teljes listája az alábbiak szerint érhető el:

Get-command | ahol ($ _. paraméterek.keys -tartalmazza a "Számítógépnév" -t és ($ _. paraméterek.

Távoli munka összefoglalása a PowerShell 2.0 -ban
A PowerShell 2.0 távoli működésének titka az alapvető dolgok megértése:
Telepítse a WinRm programot.
A távoli kommunikációt engedélyezni kell az Enable-PSRemoting paranccsal.
Be kell állítania a TrustedHosts szolgáltatást (például állítsa be értékként *).
Az Enter-PSSession parancs használatakor ne felejtse el megadni a teljesen minősített gazdagépnevet vagy IP-címet.

Egy angol nyelvű információforrás, amelyet én mutattam be és kissé átdolgoztam.

# Hozzon létre egy új munkamenetet a távoli géphez való csatlakozáshoz $ s = New -PSSession -computername TestComputer

# Önkényes műveleteket hajtunk végre a távoli gépen, például megnézzük a C könyvtár tartalmát:
Invoke -Command -Session $ s -ScriptBlock (ls c: \)

# Hozza létre a "% ProgramFiles% \ MyCompany \ MySoft" könyvtárat a távoli gépen
Invoke -Command -Session $ s -ScriptBlock (New -Item -Path "$ env: ProgramFiles \ MyCompany \ MySoft" -ItemType könyvtár)

# Azonban sokkal kényelmesebb, ha nem manuálisan írja be a parancsokat, hanem kész parancsfájlt futtat egy távoli gépen:
Invoke -Command -Session $ s -FilePath "\\ ServerDir \ Common Scripts \ MyScript.ps1"

# Fejezze be az ülést
$ s | remove-PSSession

  • Oktatóanyag

Van minimum elmélet, főleg gyakorlati rész. Leírja a WinRM konfigurálását, a hálózati adapter profiljának megváltoztatását, egy szkriptet ad hozzá a TrustedHosts -hoz szűréssel, elmagyarázza, miért van szükség megbízható gazdagépekre, és felületesen lefedi azt. távoli kapcsolatok hogy leülhessen és azonnal kezelhesse a távoli gépeket.

A távirányító konfigurálásának legegyszerűbb módja a Enable-PSRemoting PowerShell rendszergazdai jogokkal. Ebben az esetben a következők történnek:

  • a WinRM szolgáltatás elindul (ha elindult, akkor újraindul)
  • a WinRM szolgáltatás állapotba kerül - automatikus indítás indításkor
  • egy WinRM figyelő jön létre HTTP forgalom a kikötőben 5985 minden helyi IP -címhez
  • tűzfal szabály jön létre a WinRM figyelő számára. Figyelem, ez az elem hibával zárul, ha a hálózati kártyák bármelyike ​​"nyilvános" típusú, mert egy port megnyitása ilyen kártyán nem jó. Ha ilyen hibaüzenetet kap a konfigurálás során, módosítsa a hálózati lány profilját a parancsmag használatával Set-NetConnectionProfile és utána futtassa újra az Enable-PSRemoting lehetőséget. Ha "Public Network" profillal rendelkező hálózati kártyára van szüksége, futtassa az Enable-PSRemoting paramétert -SkipNetworkProfileCheck ebben az esetben a tűzfal szabályai csak innen lesznek létrehozva helyi hálózat.
Ezt követően engedélyeznie kell a távoli géphez való csatlakozást azon a gépen, amelyről a vezérlésre kerül sor. Ezt biztonsági okokból tesszük annak érdekében, hogy csökkentsük a távoli vezérlőszekció vagy a DNS feltörésének kockázatát, ha helyettesítjük a távoli gépet, és megakadályozzuk a parancsfájlok végrehajtását olyan gépeken, amelyeket nem erőszakkal engedélyezett.

A csatlakozási lehetőségek ellenőrzéséhez használja a következőket:
get-item wsman: \ localhost \ Client \ TrustedHosts
engedélyt, hogy mindenkihez csatlakozhasson
set -item wsman: localhost \ client \ trustedhosts -value *
Ha mindenkihez megnyitja a hozzáférést a * megadásával, akkor a WinRM ellenőrzés nélkül csatlakozik MINDEN géphez. Ne feledje, hogy megnyitja magát a potenciális hackelés ellen a helyi hálózatból. Jobb, ha megadja a gazdagép címét, ahová csatlakoznia kell, akkor a WinRM elutasítja az összes többi címet vagy nevet. Ha a gép, amelyről kezeli, egy tartományban van, akkor az adott tartomány összes gépében megbízni fog. Ha nem egy tartományban vagy egy másik tartományban van, akkor a TrustedHosts -ban meg kell adnia annak a gépnek a címét vagy nevét, amelyhez csatlakozni fogunk. Nincs szükség arra, hogy hozzáadjuk magunkat ahhoz a géphez, amelyhez csatlakozunk.

A súgó parancsokat tartalmaz, kissé átalakítottam őket szkriptre
################################################### ######################################NewHost hozzáadása a TrustedHost listához szűréssel, ha már létezik ilyen sor # ki tudod húzni parancs sor a paraméter közvetlen megadása például#. \ Add-TrustedHost.ps1 192.168.2.1 ################################# ################################################### # param ($ NewHost = "192.168.2.89") Write-Host "host hozzáadása: $ NewHost" $ prev = (get-item WSMan: \ localhost \ Client \ TrustedHosts) .value if (($ prev.Contains ($ NewHost )) -eq $ false) (if ($ prev -eq "") (set -item WSMan: \ localhost \ Client \ TrustedHosts -Value "(! LANG: $ NewHost)" } else { set-item WSMan:\localhost\Client\TrustedHosts -Value "$ előző, $ NewHost" } } Write-Host "" Write-Host "Now TrustedHosts contains:" (get-item WSMan:\localhost\Client\TrustedHosts).value !}
ellenőrzi, hogy van -e ilyen bejegyzés, ha nincs, akkor hozzáadja a listához. A parancssorból hívhat a cím vagy a név megadásával.

Különbséget jelent a név vagy a cím megadása. Ha csak egy cím van a TrustedHosts -ban, akkor nem fog működni a munkamenet név szerinti megnyitása, és fordítva - ha nevet ad meg, akkor nem működik a címhez való csatolás. Ezt fontold meg.

mi a különbség

Az Enable-PSRemoting többet tesz, mint a "winrm quickconfig". A Set-WSManQuickConfig parancsmag pontosan ugyanazt csinálja, mint a "winrm quickconfig". Az Enable-PSRemoting a Set-WSManQuickConfig parancsot futtatja a rendszer konfigurálásakor

Távoli kapcsolatok
1. Foglalkozások 1-1
megnyitotta a csapat
Enter -PSSession -ComputerName Test
Kapsz egy héjat a távoli gépen. A localhost megadásával csatlakozhat önmagához. Az alternatív jóváírásokat a paraméter határozza meg -Hitelesítő adatok, a kilépést a cmdlet hajtja végre Kilépés-PSSession

A korlátozások a következők:

  • nem tud második ugrást végrehajtani - csak 1 munkamenet, nem csatlakozhat tovább a munkameneten belül
  • nem használhat olyan parancsokat, amelyek rendelkeznek grafikus felület... Ha ezt megteszi, a héj lefagy, nyomja le a Ctrl + C billentyűt
  • nem futtathat olyan parancsokat, amelyek saját héjjal rendelkeznek, például nslookup, netsh
  • futtathat szkripteket, ha a távoli gép indítási házirendje lehetővé teszi azok futtatását
  • nem csatolhat egy interaktív munkamenethez, "hálózati bejelentkezésként" jelentkezik be mintha belekapaszkodott volna hálózati meghajtó... Ezért a bejelentkezési szkriptek nem indulnak el, és előfordulhat, hogy nem kapja meg a saját mappát a távoli gépen (ez további ok arra, hogy ne térképezze fel az otthoni mappákat bejelentkezési szkriptekkel)
  • akkor sem léphet kapcsolatba a felhasználóval egy távoli gépen, ha be van jelentkezve. Nem fogod tudni megmutatni neki az ablakot, vagy kinyomtatni neki semmit.
ez a módszer a legjobb az egyszerű műveletekhez, jelentkezzen be, rángassa meg a szervert és szakítsa meg a kapcsolatot. Ha változókat kell tartania a hatókörben, hosszú műveletre van szüksége (sok óra vagy nap), több adminisztrációs lehetőségre van szüksége, akkor fejlettebb technikát kell használnia.
Egy komment.
a hálózaton keresztül továbbított objektumok megszakadnak és megszűnnek. Módszereiket eltávolítják, a tulajdonságok megmaradnak. Ha nem húzza a tárgyat az autójára, varázsolja fel és helyezze vissza, akkor nem fog működni. Ha többet kell írni, akkor külön is hozzáadom.

2. 1-sok ülés
Hívás-parancs
így határozzuk meg, hogy mit fogunk végrehajtani:
$ sb = (parancsok a távoli géphez, pontosvesszővel elválasztva)
átvitel távoli gépekre Test1 és Test2
Invoke -Command -ComputerName Test1, Test2 -ScriptBlock $ sb
egyszerre 32 autóra önthető. Ha alternatív jóváírásokat használ, használja a -Credential paramétert

Ahhoz, hogy a teljes szkriptet átadja a -ScriptBlock paraméter helyett, írja a -FilePath, a távoli gépnek NEM kell hozzáférnie a fájlhoz, hanem részekre lesz értelmezve, HTTP -n keresztül továbbítva és a másik oldalról végrehajtva.

Ne feledje, hogy a másik oldalon új hatókör lesz, így a szkript nem kap értékeket a konzolról, és a szkriptváltozók üresek lehetnek ezen az oldalon. Ezért azonnal vigyen át kész utasításokat és parancsfájlokat paraméterekkel.

Az Invoke-Command teljes használatához képesnek kell lennie arra, hogy a sorokat szkriptblokkokká alakítsa. Például parancsai vannak, amelyek bizonyos listától függenek, létre kell hozni egy karakterláncot, ScriptBlock -ba kell alakítani, és el kell küldeni egy távoli számítógépre:
$ sb = :: Létrehozás ($ SomeString)
kuda78
A cikk nagyon hiányzik fontos pont- paraméterek átadása egy távoli gépen lévő parancsfájlnak.

$ deployRemote = (
param (
$ targetEnvName,
$ targetUsername)
$ Global: ErrorActionPreference = "Stop"
#…
}

Invoke -Command -Session $ session -ScriptBlock $ deployRemote -ArgumentList ($ targetEnvName, $ targetUsername)


Igen valóban kimaradt. Szándékosan tettem, hogy ne terheljem át a felülvizsgálatot paraméterekkel és leírásokkal. Kösz. A -ArgumentList paraméter mind a szkriptblokkokkal, mind a szkriptekkel működik

3. Ülések
Ekkor jön létre a darab egy másolata a másik oldalról, amely folyamatosan lóg a memóriában, és parancsokat küldenek hozzá. Ennek eredményeként újra csatlakozhat hozzá, hosszú távú végrehajtást olvashat, ragaszkodhat különböző szkriptekhez vagy különböző felhasználókhoz. Például van egy parancsfájlkészlete, amely egy feladatot old meg részenként, mindegyik pedig csatlakozhat egy távoli munkamenethez, megtekintheti a korábbi parancsok eredményeit, rendelkezik egy betöltött modullal, közös változókkal, közös környezettel a munkamenetig erőszakkal zárva van.

A munkamenet a New-PSSession parancsmag használatával jön létre, az eredmény egy változóba helyezhető
$ DC01 = New-PSSession -ComputerName DC01 $ Controllers = New-PSSession DC01, DC02, DC03
ugyanazokat a csatlakozási paramétereket használhatja, mint az Invoke-Command

Hogyan kell használni:
ha 1-1
Enter -PSSession -Session $ DC01
ha 1-to-many
Invoke -Command -Sessions $ Controllers -ScriptBlock (get -eventlog -logname security -newest 50)
a Get-PSSession segítségével megtekintheti, hogy mely munkamenetek vannak nyitva, zárja be az Remove-PSSession programot
zárja be az összes ülést
Get-PSSession | Eltávolítás-PSSession
csatolhatja a munkamenethez a Connect-PSSession használatával, szétkapcsolhat a Disconnect-PSSession segítségével

Az Invoke-Command azonnal létrehozhat egy leválasztott munkamenetet, parancsokat küld végrehajtásra és szétkapcsol, később csatlakozhat és letöltheti a munka eredményeit. Ez a -Disconnected paraméterrel történik. Eredmények lekérése a Recieve-PSSession parancsmag segítségével.

A munkameneteknek sok beállítása van, sőt lehetőség van munkamenetek létrehozására csonka parancsokkal, modulokkal stb. Egyéni végpontok



Tetszett a cikk? Oszd meg