Geek School Erlernen der Verwendung von Remoting in PowerShell
Eine der besten Funktionen von PowerShell ist die Möglichkeit, Ihre Server per Fernzugriff zu verwalten. Sie können sogar mehrere davon gleichzeitig verwalten.
Lesen Sie unbedingt die vorherigen Artikel der Serie:
- Erfahren Sie, wie Sie Windows mit PowerShell automatisieren
- Verwenden von Cmdlets in PowerShell
- Informationen zum Verwenden von Objekten in PowerShell
- Lernen Sie das Formatieren, Filtern und Vergleichen in PowerShell
Und bleiben Sie die ganze Woche für den Rest der Serie dran.
Was ist Remoting??
Die Massenverwaltung Ihrer Server kann mühsam sein, und wenn Sie zuvor auf 50 Webservern eine IIS-Konfigurationsänderung vorgenommen haben, werden Sie wissen, was ich meine. Dies sind Situationen, in denen PowerShell Remoting und die Skriptfähigkeiten der Sprache zur Rettung geraten können. Mithilfe von HTTP oder dem sichereren HTTPS können Sie mit PowerShell Remoting Befehle an einen Remote-Computer in Ihrem Netzwerk senden. Die Maschine führt dann die Befehle aus und sendet die Ausgabe an Sie zurück, die wiederum auf Ihrem Bildschirm angezeigt wird.
Lassen Sie uns technisch sein
Der Kern von PowerShell Remoting besteht aus einem einzelnen Windows-Dienst, der Windows-Remoteverwaltung oder dem WinRM-Dienst, wie er bekannt wurde. Mit WinRM können Sie eine oder mehrere Sitzungskonfigurationen (auch als Endpunkte bezeichnet) einrichten. Hierbei handelt es sich im Wesentlichen um Dateien, die Informationen zu den Erfahrungen enthalten, die Sie der Person bereitstellen möchten, die eine Verbindung zu Ihrer Remote-PowerShell-Instanz herstellt. Sie können Sitzungskonfigurationsdateien verwenden, um zu definieren, wer und wer keine Verbindung zur Instanz herstellen kann, welche Cmdlets und Skripts sie ausführen können und in welchem Sicherheitskontext die Sitzung ausgeführt werden muss. Mit dem WinRM-Dienst richten Sie auch "Listener" ein, die auf eingehende PowerShell-Anforderungen warten. Diese "Listener" können entweder HTTP oder HTTPS sein und an eine einzige IP-Adresse auf Ihrem Computer gebunden sein. Wenn Sie eine PowerShell-Verbindung zu einem anderen Computer öffnen (technisch erfolgt dies mit dem auf HTTP basierenden WS-MAN-Protokoll), wird die Verbindung an einen dieser "Listener" gebunden. Die "Listener" sind dann dafür verantwortlich, den Verkehr an die Anwendung zu senden, die der entsprechenden Sitzungskonfigurationsdatei zugeordnet ist. Die Anwendung (normalerweise PowerShell, aber Sie können auch andere Hosting-Anwendungen haben, wenn Sie möchten), führt den Befehl aus und führt die Ergebnisse über den "Listener" über das Netzwerk und zurück auf Ihren Computer.
Zeig mir wie
Zuerst müssen Sie Remoting auf dem Computer aktivieren, zu dem Sie eine Verbindung herstellen möchten. Dazu können Sie Folgendes ausführen:
Enable-PSRemoting
Sie müssen dann alle Ansagen mit Ja beantworten. Wenn Sie Enable-PSRemoting ausführen, werden an Ihrem PC einige Änderungen vorgenommen:
- Der WinRM-Dienst wird gestartet.
- Der WinRM-Dienst wechselt vom manuellen Startmodus zu Automatisch.
- Es erstellt einen HTTP-Listener, der an alle Netzwerkkarten gebunden ist.
- Es erstellt außerdem eine Firewall-Ausnahme für das WS-MAN-Protokoll.
- Einige Standardsitzungskonfigurationen werden erstellt
Wenn Sie Windows 7 ausführen und der Speicherort Ihrer Netzwerkkarte auf "Öffentlich" gesetzt ist, schlägt die Aktivierung von PowerShell Remoting fehl. Um dies zu beheben, wechseln Sie einfach zum Standort des Heim- oder Arbeitsnetzwerks. Alternativ können Sie die Netzwerkprüfung folgendermaßen überspringen:
Enable-PSRemoting -SkipNetworkProfileCheck
Wir empfehlen jedoch, den Netzwerkstandort zu ändern.
Es gibt zwei Möglichkeiten, mithilfe von PowerShell eine Verbindung zu einem anderen Computer herzustellen. Es gibt die Eins-zu-Eins-Methode, die der Verwendung von SSH sehr ähnlich ist, und dann gibt es die Eins-zu-Eins-Methode.
Verwenden einer PowerShell-Sitzung
Die erste Möglichkeit zum Herstellen einer Verbindung zu einem Remote-Computer mithilfe von PowerShell besteht in der Verwendung einer so genannten PowerShell-Sitzung. Einfach ausgedrückt: Sie können in einer Sitzung Befehle auf dem Remote-Computer auf interaktive Weise ausführen, ähnlich wie auf Ihrem eigenen Computer. Um eine Sitzung zu öffnen, geben Sie einfach Folgendes ein:
Enter-PSSession -Computername „Darlah“
Die Aufforderung erhält ein Präfix, das den Computer angibt, für den Sie die Cmdlets ausführen.
Von hier aus können Sie die Aufforderung wirklich so behandeln, als würden Sie am entfernten Rechner sitzen. Wenn Sie beispielsweise alle Dateien auf dem Laufwerk C: \ sehen möchten, können Sie Folgendes tun:
Get-ChildItem -Path C: \
Wenn Sie aus einem Linux-Hintergrund stammen, können Sie sich diese One-to-One-Remoting-Methode als die PowerShell-Alternative zu SSH vorstellen.
Invoke-Befehl verwenden
Die zweite Möglichkeit, PowerShell auf einem Remote-Computer zu verwenden, ist die Verwendung von Invoke-Command. Der Vorteil der Verwendung von Invoke-Command besteht darin, dass Sie denselben Befehl auf mehreren Maschinen gleichzeitig ausführen können. Wie Sie sich vorstellen können, ist dies besonders nützlich, wenn Sie beispielsweise Ereignisprotokolle von Ihren Servern sammeln möchten. Invoke-Command folgt der folgenden Syntax:
Invoke-Befehl -Computername Darlah, localhost -ScriptBlock Get-EventLog-Anwendung -Neueste 2
Da der Befehl auf allen Maschinen parallel ausgeführt wird, benötigen Sie eine Möglichkeit, um zu ermitteln, von welchem PC ein bestimmtes Ergebnis stammt. Sie können dies tun, indem Sie die PSComputerName-Eigenschaft anzeigen.
Wenn Sie Invoke-Command verwenden, verfügen Sie nicht mehr über die Objekte, die Sie in der Pipeline erwarten könnten. Sie sehen, damit PowerShell die Informationen vom Remote-Computer zurück auf Ihren Computer erhält, müssen sie die Objekte darstellen, die der Befehl auf dem Remote-Computer ausführt. Heutzutage scheint die Wahl einer hierarchischen Datenstruktur die Verwendung von XML zu sein, dh wenn Sie einen Befehl mit Invoke-Command ausgeben, werden die Ergebnisse zuerst in XML serialisiert, bevor sie an Ihren Computer zurückgesendet werden. Sobald sie zu Ihrem Rechner zurückgekehrt sind, werden sie wieder zu einem Objekt deserialisiert. Das Problem dabei ist, dass, wenn sie deserialisiert werden, alle Methoden außer der ToString () -Methode, die das Objekt hatte, davon entfernt werden.
Anmerkung: Es gibt einige Ausnahmen von dieser Regel. Zum Beispiel können die meisten primitiven Typen wie Ganzzahlen mit den darin enthaltenen Methoden deserialisiert werden. Es gibt auch einen Prozess namens Rehydration, bei dem einige Methoden zu deserialisierten Objekten hinzugefügt werden können. Also sei vorsichtig und denke daran, dass Get-Member dein Freund ist.
Hausaufgaben
- Lesen Sie das Secrets of PowerShell Remoting eBook von Don Jones.