PowerShell Remoting GYIK
Amikor távolról dolgozik, parancsokat ír be a PowerShellbe az egyik számítógépen (az úgynevezett „helyi számítógépen”), de a parancsok egy másik számítógépen (az úgynevezett „távoli számítógépen”) futnak. A távmunka élményének a lehető legpontosabbnak kell lennie a távoli számítógépen végzett munkához.
Jegyzet
A PowerShell-távvezérlés használatához a távoli számítógépet távvezérlésre kell konfigurálni. További információért lásd a about_Remote_Requirements című részt.
Mindkét számítógépen telepítve kell lennie a PowerShellnek?
Igen. A távoli munkavégzéshez a helyi és távoli számítógépeknek rendelkezniük kell a PowerShell-lel, a Microsoft .NET-keretrendszerrel és a Web Services for Management (WS-Management) protokollal. Minden fájlnak és egyéb erőforrásnak, amely egy adott parancs végrehajtásához szükséges, a távoli számítógépen kell lennie.
A Windows PowerShell 3.0 és a Windows PowerShell 2.0 rendszert futtató számítógépek távolról csatlakozhatnak egymáshoz, és távoli parancsokat futtathatnak. Egyes szolgáltatások azonban, például a munkamenetről való leválasztás és újbóli csatlakozás lehetősége csak akkor működnek, ha mindkét számítógépen Windows PowerShell 3.0 fut.
Engedéllyel kell rendelkeznie a távoli számítógéphez való csatlakozáshoz, a PowerShell futtatásához, valamint az adattárak (például fájlok és mappák), valamint a távoli számítógép beállításjegyzékéhez való hozzáféréshez.
További információért lásd a about_Remote_Requirements című részt.
Hogyan működik a távvezérlés?
Amikor elküld egy távoli parancsot, a parancs a hálózaton keresztül a távoli számítógép PowerShell-motorjába kerül, és a távoli számítógépen lévő PowerShell-ügyfélben fut. A parancs eredményeit a rendszer visszaküldi a helyi számítógépre, és megjelenik a helyi számítógép PowerShell-munkamenetében.
A parancsok továbbításához és a kimenet fogadásához a PowerShell a WS-Management protokollt használja. A WS-Management protokollról további információt a Windows dokumentáció WS-Management Protocol című részében talál.
A Windows PowerShell 3.0-tól kezdve a távoli munkamenetek a távoli számítógépen tárolódnak. Ez lehetővé teszi, hogy megszakítsa a kapcsolatot a munkamenettel, és újra csatlakozzon egy másik munkamenethez vagy egy másik számítógéphez anélkül, hogy megszakítaná a parancsokat vagy elveszítené az állapotát.
Biztonságos a PowerShell távvezérlés?
Amikor csatlakozik egy távoli számítógéphez, a rendszer a helyi számítógépen lévő felhasználónév és jelszó hitelesítő adatait vagy a parancsban megadott hitelesítő adatokat használja a távoli számítógépre való bejelentkezéshez. A hitelesítő adatok és az átvitel többi része titkosítva van.
További védelem hozzáadásához beállíthatja a távoli számítógépet a Secure Sockets Layer (SSL) használatára a HTTP helyett a Windows távfelügyeleti (WinRM) kérések figyeléséhez. Ezután a felhasználók használhatják az Invoke-Command, New-PSSession és Enter-PSSession UseSSL paraméterét. parancsmagokat a kapcsolat létrehozásakor. Ez a beállítás a biztonságosabb HTTPS-csatornát használja a HTTP helyett.
Minden távoli parancshoz szükség van PowerShell távvezérlésre?
Nem. Egyes parancsmagok rendelkeznek egy ComputerName paraméterrel, amely lehetővé teszi az objektumok lekérését a távoli számítógépről.
Ezek a parancsmagok nem használnak PowerShell-távirányítást. Így ezeket bármely PowerShell-t futtató számítógépen használhatja, még akkor is, ha a számítógép nincs konfigurálva a PowerShell-távvezérléshez, vagy ha a számítógép nem felel meg a PowerShell-távolítás követelményeinek.
Ezek a parancsmagok a következőket tartalmazzák:
Get-HotfixRename-ComputerRestart-ComputerStop-Computer
Az összes ComputerName paraméterrel rendelkező parancsmag megkereséséhez írja be:
Get-Help * -Parameter ComputerName
# or
Get-Command -ParameterName ComputerName
Ha meg szeretné állapítani, hogy egy adott parancsmag ComputerName paramétere megköveteli-e a PowerShell távvezérlést, tekintse meg a paraméter leírását. A paraméter leírásának megjelenítéséhez írja be:
Get-Help <cmdlet-name> -Parameter ComputerName
Például:
Get-Help Get-Hotfix -Parameter ComputerName
Az összes többi parancshoz használja az Invoke-Command parancsmagot.
Hogyan futtathatok parancsot egy távoli számítógépen?
Parancs távoli számítógépen való futtatásához használja az Invoke-Command parancsmagot.
Tegye a parancsot kapcsos zárójelek közé ({}), hogy szkriptblokk legyen. A parancs megadásához használja a Invoke-Command ScriptBlock paraméterét.
Távoli számítógép megadásához használhatja a Invoke-Command ComputerName paraméterét. Vagy létrehozhat egy állandó kapcsolatot egy távoli számítógéppel (munkamenet), majd a Session paraméterrel a Invoke-Command parancsot futtathatja a munkamenetben.
Például a következő parancsok egy Get-Process parancsot futtatnak távolról.
Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {Get-Process}
# - OR -
Invoke-Command -Session $s -ScriptBlock {Get-Process}
A távoli parancs megszakításához írja be a CTRL+C parancsot. A megszakítási kérés a távoli számítógéphez kerül, ahol leállítja a távoli parancsot.
A távoli parancsokkal kapcsolatos további információkért tekintse meg az about_Remote című részt és a távvezérlést támogató parancsmagok súgótémaköreit.
Telnetezni tudok egy távoli számítógépre?
Az Enter-PSSession parancsmag segítségével interaktív munkamenetet indíthat távoli számítógéppel.
A PowerShell parancssorba írja be:
Enter-PSSession <ComputerName>
A parancssor megváltozik, jelezve, hogy csatlakozik a távoli számítógéphez.
<ComputerName>\C:>
Most a beírt parancsok ugyanúgy futnak a távoli számítógépen, mintha közvetlenül a távoli számítógépen írták volna be őket.
Az interaktív munkamenet befejezéséhez írja be:
Exit-PSSession
Az interaktív munkamenet egy állandó munkamenet, amely a WS-Management protokollt használja. Ez nem ugyanaz, mint a Telnet használata, de hasonló élményt nyújt.
További információért lásd: Enter-PSSession.
Létrehozhatok tartós kapcsolatot?
Igen. Távoli parancsokat futtathat a távoli számítógép nevének, NetBIOS-nevének vagy IP-címének megadásával. Vagy futtathat távoli parancsokat a távoli számítógéphez csatlakoztatott PowerShell-munkamenet (PSSession) megadásával.
Ha az Invoke-Command vagy az Enter-PSSession ComputerName paraméterét használja, a PowerShell ideiglenes kapcsolatot hoz létre. A PowerShell a kapcsolatot csak az aktuális parancs futtatására használja, majd bezárja a kapcsolatot. Ez egy nagyon hatékony módszer egyetlen parancs vagy több nem kapcsolódó parancs futtatására, még sok távoli számítógépen is.
Amikor a New-PSSession parancsmagot használja PSS-session létrehozásához, a PowerShell állandó kapcsolatot hoz létre a PSSession számára. Ezután több parancsot is futtathat a PSSessionban, beleértve az adatokat megosztó parancsokat is.
Általában egy PSS-sessiont hoz létre az adatok megosztására szolgáló kapcsolódó parancsok sorozatának futtatásához. Ellenkező esetben a Számítógépnév paraméter által létrehozott ideiglenes kapcsolat elegendő a legtöbb parancshoz.
A munkamenetekkel kapcsolatos további információkért lásd: about_PSSessions.
Futtathatok parancsokat egyszerre több számítógépen?
Igen. Az Invoke-Command parancsmag ComputerName paramétere több számítógépnevet, a Session paraméter pedig több PSS-sessiont fogad el.
Amikor egy Invoke-Command parancsot futtat, a PowerShell az összes megadott számítógépen vagy az összes megadott PSS-munkameneten futtatja a parancsokat.
A PowerShell több száz párhuzamos távoli kapcsolatot képes kezelni. A küldhető távoli parancsok számát azonban korlátozhatják a számítógép erőforrásai, valamint a több hálózati kapcsolat létrehozására és karbantartására való képessége.
További információért tekintse meg a példát az Invoke-Command súgótémakörben.
Hol vannak a profiljaim?
A PowerShell-profilok nem futnak automatikusan a távoli munkamenetekben, így a profil által hozzáadott parancsok nem jelennek meg a munkamenetben. Ezenkívül a $profile automatikus változó nem kerül feltöltésre a távoli munkamenetekben.
Profil futtatásához egy munkamenetben használja az Invoke-Command parancsmagot.
Például a következő parancs futtatja a CurrentUserCurrentHost profilt a helyi számítógépről a $s munkamenetben.
Invoke-Command -Session $s -FilePath $profile
A következő parancs futtatja a CurrentUserCurrentHost profilt a távoli számítógépről a $s munkamenetben. Mivel a $profile változó nincs kitöltve, a parancs a profil explicit elérési útját használja.
Invoke-Command -Session $s {
. "$home\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"
}
A parancs futtatása után a profil által a munkamenethez hozzáadott parancsok elérhetők a $s mappában.
A szekciókonfigurációban indító parancsfájlt is használhat, hogy minden távoli munkamenetben futtasson egy profilt, amely a szekciókonfigurációt használja.
A PowerShell-profilokkal kapcsolatos további információkért lásd: about_Profiles. A munkamenet-konfigurációkkal kapcsolatos további információkért lásd: Register-PSSessionConfiguration.
Hogyan működik a szabályozás a távoli parancsokon?
A helyi számítógépen lévő erőforrások kezelésének elősegítése érdekében a PowerShell tartalmaz egy parancsonkénti szabályozási funkciót, amely lehetővé teszi az egyes parancsokhoz létrehozott egyidejű távoli kapcsolatok számának korlátozását.
Az alapértelmezett 32 egyidejű kapcsolat, de használhatja a parancsmagok ThrottleLimit paraméterét, hogy egyéni fojtószelep-korlátot állítson be bizonyos parancsokhoz.
A szabályozási funkció használatakor ne feledje, hogy az minden parancsra vonatkozik, nem a teljes munkamenetre vagy a számítógépre. Ha egyidejűleg több munkamenetben vagy PSS-munkamenetben futtat parancsokat, az egyidejű kapcsolatok száma az összes munkamenetben lévő párhuzamos kapcsolatok összege.
A ThrottleLimit paraméterrel rendelkező parancsmagok kereséséhez írja be:
Get-Help * -Parameter ThrottleLimit
-or-
Get-Command -ParameterName ThrottleLimit
A távoli parancsok kimenete eltér a helyi kimenettől?
A PowerShell helyi használatakor "élő" .NET-keretrendszer objektumokat küld és fogad; Az "élő" objektumok olyan objektumok, amelyek tényleges programokhoz vagy rendszerkomponensekhez vannak társítva. Amikor meghívja a metódusokat vagy módosítja az élő objektumok tulajdonságait, a változtatások az aktuális programot vagy összetevőt érintik. És ha egy program vagy komponens tulajdonságai megváltoznak, az azokat reprezentáló objektum tulajdonságai is megváltoznak.
Mivel azonban a legtöbb élő objektum nem továbbítható a hálózaton, a PowerShell a távoli parancsokban küldött objektumok nagy részét "sorosítja", azaz minden objektumot XML (Constraint Language in XML [CLiXML]) adatelemek sorozatává alakít át. terjedés.
Amikor a PowerShell soros objektumot kap, az XML-t deserializált objektumtípussá alakítja. A deszerializált objektum a program vagy a komponens korábbi tulajdonságainak pontos rögzítése, de már nem "élő", azaz már nincs közvetlenül társítva az összetevőhöz. És a módszereket eltávolítják, mert már nem hatékonyak.
Általában a deszerializált objektumokat ugyanúgy használhatja, mint az élő objektumokat, de tisztában kell lennie a korlátaikkal. Ezenkívül az Invoke-Command parancsmag által visszaadott objektumok további tulajdonságokkal rendelkeznek, amelyek segítenek meghatározni a parancs eredetét.
Egyes objektumtípusok, mint például a DirectoryInfo objektumok és a GUID-k, fogadáskor visszakonvertálják élő objektumokat. Ezek az objektumok nem igényelnek különleges kezelést vagy formázást.
A távoli kimenet értelmezésével és formázásával kapcsolatos információkért lásd: about_Remote_Output.
Futtathatok távolról háttérmunkákat?
Igen. A PowerShell háttérfeladata egy PowerShell-parancs, amely aszinkron módon fut anélkül, hogy interakcióba lépne a munkamenettel. Amikor elindít egy háttérfeladatot, a parancssor azonnal visszatér, és folytathatja a munkát a munkamenetben, miközben a job fut, még akkor is, ha az hosszabb ideig fut.
Egy háttérfeladatot akkor is elindíthat, amikor más parancsok futnak, mert a háttérfeladatok mindig aszinkron módon futnak egy ideiglenes munkamenetben.
Futtathat háttérfeladatokat helyi vagy távoli számítógépen. Alapértelmezés szerint egy háttérfeladat fut a helyi számítógépen. Használhatja azonban az Invoke-Command parancsmag AsJob paraméterét bármely távoli parancs futtatásához háttérfeladatként. Az Invoke-Command segítségével pedig távolról is futtathat egy Start-Job parancsot.
A PowerShell háttérfeladataival kapcsolatos további információkért lásd: about_Jobs és about_Remote_Jobs.
Futtathatok Windows programokat távoli számítógépen?
A PowerShell távoli parancsok segítségével Windows-alapú programokat futtathat távoli számítógépeken. Például futtathatja a Shutdown.exe vagy az Ipconfig.exe fájlt egy távoli számítógépen.
PowerShell-parancsokkal azonban nem nyithatja meg a felhasználói felületet egy távoli számítógépen lévő programhoz.
Amikor elindít egy Windows programot egy távoli számítógépen, a parancs nem fejeződik be, és a PowerShell parancssor nem tér vissza, amíg a program be nem fejeződik, vagy amíg le nem nyomja a CTRL+C a parancs megszakításához. Ha például az Ipconfig.exe programot egy távoli számítógépen futtatja, a parancssor nem jelenik meg addig, amíg az Ipconfig.exe be nem fejeződik.
Ha távoli parancsokat használ egy felhasználói felülettel rendelkező program elindításához, a programfolyamat elindul, de a felhasználói felület nem jelenik meg. A PowerShell parancs nem fejeződik be, és a parancssor nem jelenik meg addig, amíg le nem állítja a programfolyamatot, vagy amíg meg nem nyomja a CTRL+C billentyűkombinációt, ami megszakítja a parancsot és leállítja a folyamatot. .
Ha például PowerShell-parancsot használ a Jegyzettömb futtatásához egy távoli számítógépen, a Jegyzettömb folyamat elindul a távoli számítógépen, de a Jegyzettömb felhasználói felülete nem jelenik meg. A parancs megszakításához és a parancssor visszaállításához nyomja le a CTRL+C billentyűkombinációt.
Korlátozhatom a felhasználók által távolról futtatható parancsokat a számítógépemen?
Igen. Minden távoli munkamenetnek a távoli számítógép munkamenet-konfigurációinak egyikét kell használnia. Kezelheti a munkamenet-konfigurációkat a számítógépén (és az ezen munkamenet-konfigurációkhoz tartozó engedélyeket), hogy meghatározza, ki futhat távolról parancsokat a számítógépen, és mely parancsokat futtathatja.
A munkamenet-konfiguráció konfigurálja a munkamenet környezetét. A konfigurációt egy új konfigurációs osztályt megvalósító összeállítás vagy a munkamenetben futó parancsfájl használatával határozhatja meg. A konfiguráció meghatározhatja a munkamenetben elérhető parancsokat. Ezenkívül a konfiguráció tartalmazhat olyan beállításokat, amelyek védik a számítógépet, például olyan beállításokat, amelyek korlátozzák a munkamenet által távolról egyetlen objektumban vagy parancsban fogadható adatmennyiséget. Megadhat egy biztonsági leírót is, amely meghatározza a konfiguráció használatához szükséges engedélyeket.
Az Enable-PSRemoting parancsmag létrehozza az alapértelmezett munkamenet-konfigurációkat a számítógépen: Microsoft.PowerShell, Microsoft.PowerShell.Workflow és Microsoft.PowerShell32 (csak 64 bites operációs rendszereken). Az Enable-PSRemoting úgy állítja be a konfiguráció biztonsági leíróját, hogy csak a rendszergazdák csoport tagjai használhatják azokat.
A munkamenet-konfigurációs parancsmagok segítségével szerkesztheti az alapértelmezett munkamenet-konfigurációkat, új munkamenet-konfigurációkat hozhat létre, és módosíthatja az összes munkamenet-konfiguráció biztonsági leíróját.
A Windows PowerShell 3.0-tól kezdve a New-PSSessionConfigurationFile parancsmag lehetővé teszi egyéni munkamenet-konfigurációk létrehozását szöveges fájl használatával. A fájl lehetőséget tartalmaz a nyelvi mód beállítására, valamint a munkamenet-konfigurációt használó munkamenetekben elérhető parancsmagok és modulok megadására.
Amikor a felhasználók az Invoke-Command, New-PSSession vagy Enter-PSSession parancsmagot használják, használhatják a ConfigurationName parancsmagot. > paraméter a munkamenethez használt munkamenet-konfiguráció jelzésére. Ezenkívül módosíthatják a munkameneteik által használt alapértelmezett konfigurációt a $PSSessionConfigurationName preferenciaváltozó értékének módosításával a munkamenetben.
A munkamenet-konfigurációkkal kapcsolatos további információkért tekintse meg a munkamenet-konfigurációs parancsmagok súgóját. A munkamenet-konfigurációs parancsmagok megkereséséhez írja be:
Get-Command *PSSessionConfiguration
Mik azok a be- és kifúvó konfigurációk?
A legáltalánosabb, több számítógépet érintő PowerShell-távolítási forgatókönyv az egy a többhez konfiguráció, amelyben egy helyi számítógép (a rendszergazda számítógépe) számos távoli számítógépen futtat PowerShell-parancsokat. Ez a "fan-out" forgatókönyv néven ismert.
Egyes vállalatoknál azonban a konfiguráció több az egyhez, ahol sok ügyfélszámítógép csatlakozik egyetlen távoli számítógéphez, amelyen a PowerShell fut, például egy fájlkiszolgálóhoz vagy egy kioszkhoz. Ezt "fan-in" konfigurációnak nevezik.
A PowerShell távvezérlés támogatja a ki- és befúvó konfigurációkat egyaránt.
A kifúvó konfigurációhoz a PowerShell a Web Services for Management (WS-Management) protokollt és a WinRM szolgáltatást használja, amely támogatja a WS-Management Microsoft implementációját. Amikor egy helyi számítógép csatlakozik egy távoli számítógéphez, a WS-Management kapcsolatot létesít, és a PowerShell beépülő modulja segítségével elindítja a PowerShell-gazdafolyamatot (Wsmprovhost.exe) a távoli számítógépen. A felhasználó megadhat egy alternatív portot, egy alternatív munkamenet-konfigurációt és egyéb szolgáltatásokat a távoli kapcsolat testreszabásához.
A "fan-in" konfiguráció támogatása érdekében a PowerShell internetes információs szolgáltatásokat (IIS) használ a WS-Management hosztolására, a PowerShell beépülő modul betöltésére és a PowerShell elindítására. Ebben a forgatókönyvben ahelyett, hogy minden PowerShell-munkamenetet külön folyamatban indítana el, az összes PowerShell-munkamenet ugyanabban a gazdagépfolyamatban fut.
Az IIS-tárhely és a fan-in távfelügyelet nem támogatott a Windows XP és a Windows Server 2003 rendszerben.
Fan-in konfigurációban a felhasználó megadhat egy kapcsolati URI-t és egy HTTP-végpontot, beleértve a szállítást, a számítógép nevét, a portot és az alkalmazás nevét. Az IIS az összes kérelmet meghatározott alkalmazásnévvel továbbítja az alkalmazásnak. Az alapértelmezett a WS-Management, amely képes a PowerShell kiszolgálójára.
Megadhat egy hitelesítési mechanizmust, és letilthatja vagy engedélyezheti a HTTP- és HTTPS-végpontokról történő átirányítást.
Tesztelhetem a távvezérlést egyetlen számítógépen, nem egy tartományban?
Igen. A PowerShell távvezérlés akkor is elérhető, ha a helyi számítógép nem tartományban van. A távoli szolgáltatásokat használhatja munkamenetekhez való csatlakozáshoz és munkamenetek létrehozásához ugyanazon a számítógépen. A funkciók ugyanúgy működnek, mint amikor távoli számítógéphez csatlakozik.
Ha távoli parancsokat szeretne futtatni egy munkacsoporthoz tartozó számítógépen, módosítsa a következő Windows-beállításokat a számítógépen.
Figyelem: Ezek a beállítások a rendszer összes felhasználójára hatással vannak, és sebezhetőbbé tehetik a rendszert a rosszindulatú támadásokkal szemben. Legyen óvatos, amikor ezeket a változtatásokat végrehajtja.
Windows Vista, Windows 7, Windows 8:
Hozza létre a következő beállításjegyzék-bejegyzést, majd állítsa az értékét 1-re: LocalAccountTokenFilterPolicy itt:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\SystemA bejegyzés hozzáadásához használhatja a következő PowerShell-parancsot:
$parameters = @{ Path='HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' Name='LocalAccountTokenFilterPolicy' propertyType='DWord' Value=1 } New-ItemProperty @parametersWindows Server 2003, Windows Server 2008, Windows Server 2012, Windows Server 2012 R2:
Nincs szükség változtatásokra, mert a „Hálózati hozzáférés: Megosztás és biztonsági modell helyi fiókokhoz” házirend alapértelmezett beállítása „Klasszikus”. Ellenőrizze a beállítást, ha megváltozott.
Futtathatok távoli parancsokat egy másik tartományban lévő számítógépen?
Igen. A parancsok általában hiba nélkül futnak le, bár előfordulhat, hogy az Invoke-Command, New-PSSession vagy < Credential paraméterét kell használnia.Enter-PSSession parancsmagok, amelyek biztosítják a rendszergazdák csoport egy tagjának hitelesítő adatait a távoli számítógépen. Erre néha akkor is szükség van, ha az aktuális felhasználó a Rendszergazdák csoport tagja a helyi és távoli számítógépeken.
Ha azonban a távoli számítógép nem olyan tartományban van, amelyben a helyi számítógép megbízik, előfordulhat, hogy a távoli számítógép nem tudja hitelesíteni a felhasználó hitelesítő adatait.
A hitelesítés engedélyezéséhez a következő paranccsal adja hozzá a távoli számítógépet a helyi számítógép megbízható gazdagépeinek listájához a WinRM rendszerben. Írja be a parancsot a PowerShell parancssorba.
Set-Item WSMan:\localhost\Client\TrustedHosts -Value <Remote-computer-name>
Például a Server01 számítógép hozzáadásához a helyi számítógépen található megbízható gazdagépek listájához írja be a következő parancsot a PowerShell promptba:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value Server01
A PowerShell támogatja az SSH-n keresztüli távvezérlést?
Igen. További információért lásd: PowerShell-távolítás SSH-n keresztül.
Lásd még
about_Remote
about_Profiles
about_PSSessions
about_Remote_Jobs
about_Remote_Variables
Invoke-Command
Új-PSSession