6Sep

Geek-Schule: Lernen Sie Remoting in PowerShell zu verwenden

Eine der besten Funktionen von PowerShell ist die Möglichkeit, Ihre Server remote zu verwalten. Sie können sogar mehrere davon gleichzeitig verwalten. Stellen Sie sicher, dass Sie die vorherigen Artikel der Serie gelesen haben:

  • Erfahren Sie, wie Sie Windows mit PowerShell automatisieren
  • Lernen, Cmdlets in PowerShell
  • Lernen Verwenden von Objekten in PowerShell
  • Lernen Formatieren, Filtern und Vergleichen in PowerShell

Und bleiben Sie dran für dieRest der Serie die ganze Woche.

Was ist Remoting?

Bulk-Management Ihrer Server kann mühsam sein, und wenn Sie zuvor eine IIS-Konfiguration auf 50 Webservern ändern mussten, werden Sie wissen, was ich meine. Dies sind Situationen, in denen PowerShell Remoting und die Skriptfähigkeiten der Sprache helfen können. Mit 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.

instagram viewer

Lassen Sie uns technischen

erhalten Im Kern von PowerShell Remoting liegt ein einzelner Windows-Dienst, der Windows Remote Management oder WinRM-Dienst, wie er bekannt geworden ist. Mit WinRM können Sie eine oder mehrere Sitzungskonfigurationen( auch als Endpunkte bezeichnet) einrichten, bei denen es sich im Wesentlichen um Dateien handelt, die Informationen zu der Erfahrung enthalten, die Sie der Person bereitstellen möchten, die eine Verbindung mit Ihrer Remote-PowerShell-Instanz herstellt. Genauer gesagt können Sie Sitzungskonfigurationsdateien verwenden, um zu definieren, wer und wer keine Verbindung zur Instanz herstellen kann, welche Cmdlets und Skripts ausgeführt werden 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 können an eine einzelne IP-Adresse auf Ihrem Computer gebunden sein. Wenn Sie eine PowerShell-Verbindung zu einem anderen Computer öffnen( technisch erfolgt dies mit dem WS-MAN-Protokoll, das auf HTTP basiert), wird die Verbindung an einen dieser "Listener" gebunden. Die "Zuhörer" sind dann dafür verantwortlich, den Verkehr zu der Anwendung zu senden, die mit der geeigneten Sitzungskonfigurationsdatei verknüpft ist;Die Anwendung( normalerweise PowerShell, aber Sie können auch andere Hosting-Anwendungen haben) führt dann den Befehl aus und führt die Ergebnisse über den "Listener" über das Netzwerk und zurück auf Ihren Computer zurück.

Zeigen Sie mir, wie

Das erste, was Sie tun müssen, ist Remoting auf dem Computer aktivieren, mit dem Sie eine Verbindung herstellen möchten. Dies kann folgendermaßen durchgeführt werden:

Enable-PSRemoting

Sie müssen dann alle Eingabeaufforderungen mit Ja beantworten. Wenn Sie Enable-PSRemoting ausführen, werden einige Änderungen an Ihrem PC vorgenommen:

  • Der WinRM-Dienst wird gestartet.
  • Der WinRM-Dienst wechselt vom manuellen Startmodus zu Automatisch.
  • Erzeugt einen HTTP-Listener, der an alle Ihre Netzwerkkarten gebunden ist.
  • Es erstellt auch eine eingehende Firewall-Ausnahme für das WS-MAN-Protokoll.
  • Einige Standardsitzungskonfigurationen werden erstellt.

Wenn Sie Windows 7 ausführen und der Standort Ihrer Netzwerkkarte auf "Öffentlich" eingestellt ist, schlägt das Aktivieren von PowerShell Remoting fehl. Um das Problem zu beheben, wechseln Sie einfach zum Netzwerkstandort Home oder Work. Alternativ können Sie die Netzwerkprüfung folgendermaßen überspringen:

Enable-PSRemoting -SkipNetworkProfileCheck

Es wird jedoch empfohlen, den Netzwerkstandort zu ändern.

Es gibt zwei Möglichkeiten, mit 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 Remotecomputer mithilfe von PowerShell besteht in der Verwendung einer so genannten PowerShell-Sitzung. Mit einer einfachen Sitzung können Sie Befehle auf dem Remote-Computer auf interaktive Weise ausführen, ähnlich wie auf Ihrem eigenen Computer. Geben Sie Folgendes ein, um eine Sitzung zu öffnen:

Enter-PSSession -ComputerName "Darlah"

Die Eingabeaufforderung erhält ein Präfix, das den Computer angibt, auf dem die Cmdlets ausgeführt werden.

Von hier aus können Sie die Eingabeaufforderung wirklich behandeln, als ob Sie an der entfernten Maschine sitzen würden. Wenn Sie beispielsweise alle Dateien auf dem Laufwerk C: \ anzeigen möchten, können Sie Folgendes tun:

Get-ChildItem -Pfad C: \

Wenn Sie von einem Linux-Hintergrund kommen, können Sie sich diese One-to-One-Remoting-Methode als PowerShell-Alternative zu SSH vorstellen.

Verwenden von Invoke-Command

Die zweite Möglichkeit zur Verwendung von PowerShell auf einem Remotecomputer besteht in der Verwendung von Invoke-Command. Der Vorteil von Invoke-Command liegt 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 Ereignisprotokolle von Ihren Servern sammeln möchten. Invoke-Command folgt der folgenden Syntax:

Invoke-Command -ComputerName Darlah, localhost -ScriptBlock{ Get-EventLog-Anwendung -Newest 2}

Da der Befehl auf allen Rechnern parallel ausgeführt wird, benötigen Sie eine Möglichkeit, um festzustellen, welcher PC agegebenes Ergebnis kam von. 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 möglicherweise in der Pipeline erwarten. Damit Powershell die Informationen vom Remotecomputer an Ihren Computer zurücksendet, müssen sie die Objekte, die der auf dem Remotecomputer ausgeführte Befehl ausgibt, auf eine bestimmte Weise darstellen. Heutzutage scheint die gewählte Art, eine hierarchische Datenstruktur darzustellen, die Verwendung von XML zu sein. Wenn Sie also einen Befehl mit Invoke-Command ausgeben, werden die Ergebnisse zuerst in XML serialisiert, bevor sie an Ihren Rechner zurückgesendet werden. Sobald sie zu Ihrer Maschine zurückkehren, werden sie wieder in ein Objekt deserialisiert;Das Problem besteht darin, dass bei der Deserialisierung alle Methoden mit Ausnahme der ToString() -Methode, die das Objekt hatte, von ihm entfernt wurden.

Anmerkung: Es gibt einige Ausnahmen von dieser Regel, zum Beispiel können die meisten primitiven Typen wie Integer mit ihren Methoden deserialisiert werden. Es gibt auch einen Prozess namens Rehydration, bei dem einige Methoden zu deserialisierten Objekten hinzugefügt werden können. Sei also vorsichtig und erinnere dich, dass Get-Member dein Freund ist.

Homework

  • Lesen Sie die Geheimnisse von PowerShell Remoting ebook by Don Jones.