Geek School Naučte se používat Remoting v PowerShell
Jeden z nejlepších funkcí PowerShell nabízí je schopnost vzdáleně spravovat vaše servery. Dokonce vám dovolí spravovat spoustu z nich najednou.
Ujistěte se, že jste si přečetli předchozí články v sérii:
- Naučte se automatizovat systém Windows pomocí nástroje PowerShell
- Naučte se používat Cmdlets v PowerShell
- Učení o používání objektů v prostředí PowerShell
- Formátování učení, filtrování a porovnávání v prostředí PowerShell
A zůstaňte v klidu po zbytek série celý týden.
Co je Remoting?
Hromadná správa vašich serverů může být únavná a pokud jste museli provést změnu konfigurace IIS na 50 webových serverech dříve, budete vědět, co tím myslím. Jedná se o typy situací, kdy se PowerShell Remoting a jazykové skriptovací schopnosti mohou dostat na záchranu. Pomocí protokolu HTTP nebo bezpečnějšího protokolu HTTPS umožňuje funkce PowerShell Remoting odesílat příkazy vzdálenému počítači ve vaší síti. Stroj potom spustí příkazy a odešle výstup zpět, který se na obrazovce objeví.
Pojďme technické
Jádrem služby PowerShell Remoting je jediná služba Windows, služba Vzdálená správa systému Windows nebo služba WinRM, která se stala známou. Pomocí programu WinRM můžete nastavit jednu nebo více konfigurací relací (také známých jako koncové body), které jsou v podstatě soubory, které obsahují informace o zážitku, který chcete poskytnout osobě, která se připojuje k vaší vzdálené instanci PowerShell. Konkrétněji můžete pomocí konfiguračních souborů relace definovat, kdo může a kdo se nemůže připojit k instanci, jaké skripty a skripty mohou spustit, stejně jako bezpečnostní kontext, ve kterém musí být relace spuštěna. Pomocí služby WinRM můžete také nastavit "posluchače", kteří naslouchají příchozím požadavkům PowerShell. Tyto "posluchače" mohou být buď HTTP nebo HTTPS a mohou být vázány na jednu adresu IP ve vašem počítači. Když otevřete připojení PowerShell k jinému počítači (technicky se to provádí pomocí protokolu WS-MAN, který je založen na protokolu HTTP), připojení se váže k jednomu z těchto "posluchačů". Posluchači jsou pak pověřeni odesláním provozu do aplikace spojené s příslušným konfiguračním souborem relace; aplikace (obvykle PowerShell, ale můžete mít jiné hostitelské aplikace, pokud chcete), pak spustí příkaz a přivádí výsledky zpět přes "posluchače" v síti a zpět na váš počítač.
Ukaž mi jak
První věc, kterou musíte udělat, je povolit Remoting na počítači, ke kterému se chcete připojit. To lze provést spuštěním následujícího:
Povolit-PSRemoting
Poté budete muset odpovědět ano na všechny výzvy. Když spustíte funkci Povolit-PSRemoting, do počítače se provedou několik změn:
- Spustí se služba WinRM.
- Služba služby WinRM se změní z ručního spuštění na automatický.
- Vytváří posluchač HTTP, který je vázán na všechny vaše síťové karty.
- Vytvoří také výjimku pro příchozí firewall pro protokol WS-MAN.
- Některé výchozí konfigurace relací jsou vytvořeny
Používáte-li systém Windows 7 a umístění vaší síťové karty je nastaveno na možnost Veřejné, povolíte odpojení PowerShell Remoting. Chcete-li to opravit, prostě přepněte na domovskou nebo pracovní síťovou oblast. Případně můžete síťovou kontrolu přeskočit pomocí následujícího:
Povolit -Rozpracování -SkipNetworkProfileCheck
Nicméně doporučujeme raději změnit své síťové umístění.
Existují dva způsoby připojení k jinému počítači pomocí nástroje PowerShell. Existuje metoda jedna k jedné, která je velmi podobná použití SSH, a pak existuje metoda jedna k mnoha metodám.
Použití relace PowerShell
První způsob připojení ke vzdálenému počítači pomocí PowerShell používá něco nazvaného relace PowerShell. Jednoduše řečeno, relace umožňuje spouštět příkazy ve vzdáleném počítači interaktivním způsobem, podobně jako na vašem počítači. Chcete-li otevřít relaci, zadejte následující:
Zadat-PSSession -ComputerName "Darlah"
Na výzvu se zobrazí předpona, která označuje počítač, na kterém spouští rutiny.
Odtud můžete skutečně vyřídit výzvu, jako byste seděli na vzdáleném počítači. Pokud například chcete vidět všechny soubory na jednotce C: \, můžete to udělat jednoduše:
Get-ChildItem - cesta C: \
Pokud pocházíte z prostředí Linuxu, můžete si uvědomit, že používáte tento jeden k jednomu způsobu remoting jako alternativu PowerShell k SSH.
Použití příkazu Invoke-Command
Druhý způsob, jak můžete použít PowerShell na vzdáleném počítači, je pomocí příkazu Invoke-Command. Výhoda použití příkazu Invoke-Command pochází ze skutečnosti, že můžete provést stejný příkaz na více strojích současně. Jak si dokážete představit, je to obzvláště užitečné, když chcete dělat něco jako shromažďování protokolů událostí z vašich serverů. Invoke-Command následuje následující syntaxi:
Invoke-Command -ComputerName Darlah, localhost -ScriptBlock Get-EventLog aplikace -Newest 2
Vzhledem k tomu, že příkaz je spuštěn paralelně na všech strojích, budete potřebovat nějaký způsob, jak zjistit, z kterého PC přišel daný výsledek. Můžete to udělat tím, že se podíváte na vlastnost PSComputerName.
Při použití příkazu Invoke-Command již nemáte objekty, které byste očekávali v potrubí. Vidíte, aby PowerShell získal informace ze vzdáleného počítače zpět k vašemu stroji, potřebují nějaký způsob reprezentace objektů, které příkaz spuštěn na vzdáleném počítači vystupuje. V dnešní době se zdá, že zvoleným způsobem, jak reprezentovat hierarchickou datovou strukturu, je použití XML, což znamená, že když vydáte příkaz pomocí příkazu Invoke-Command, výsledky jsou nejprve serializovány do XML před odesláním zpět do vašeho počítače. Jakmile se vrátí k vašemu stroji, jsou deseralizovaní zpět do objektu; že gotcha zde je, že když jsou deserializovány, všechny metody, s výjimkou metody ToString (), které byly předmětem odstraněny.
Poznámka: Existují některé výjimky z tohoto pravidla, například většina primitivních typů, jako jsou celá čísla, může být deserializována pomocí jeho metod. Existuje také proces nazvaný rehydratace, kde lze některé metody přidat zpět do deserializovaných objektů. Takže buďte opatrní a nezapomeňte, že Get-Member je váš přítel.
Domácí práce
- Přečtěte si tajemství PowerShell Remoting ebook od Don Jones.