Eine der besten Funktionen, die PowerShell bietet, ist die Möglichkeit, Ihre Server remote zu verwalten. Sie können sogar eine Reihe von ihnen gleichzeitig verwalten.
Lesen Sie unbedingt die vorherigen Artikel in der Reihe:
Und bleiben Sie die ganze Woche für den Rest der Serie dran.
Was ist Remoting?
Die Massenverwaltung Ihrer Server kann langwierig sein. Wenn Sie zuvor auf 50 Webservern eine IIS-Konfigurationsänderung vornehmen mussten, wissen Sie, was ich meine. Dies sind Situationen, in denen PowerShell Remoting und die Skriptfähigkeiten der Sprache Abhilfe schaffen können. Mit PowerShell Remoting können Sie mithilfe von HTTP oder dem sichereren HTTPS Befehle an einen Remotecomputer in Ihrem Netzwerk senden. Das Gerät 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 werden
Das Herzstück von PowerShell Remoting ist ein einzelner Windows-Dienst, der Windows-Remoteverwaltungs- oder WinRM-Dienst, wie er bekannt geworden ist. 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 der Erfahrung enthalten, die Sie der Person bieten möchten, die eine Verbindung zu Ihrer Remote-PowerShell-Instanz herstellt. Insbesondere können Sie mithilfe von Sitzungskonfigurationsdateien definieren, wer eine Verbindung zur Instanz herstellen kann und wer nicht, welche Cmdlets und Skripts ausgeführt werden können und unter 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 einzelne IP-Adresse auf Ihrem Computer gebunden sein. Wenn Sie eine PowerShell-Verbindung zu einem anderen Computer herstellen (technisch erfolgt dies mithilfe des WS-MAN-Protokolls, das auf HTTP basiert), wird die Verbindung an einen dieser „Listener“ gebunden. Die «Listener» sind dann dafür verantwortlich, den Datenverkehr an die Anwendung zu senden, die der entsprechenden Sitzungskonfigurationsdatei zugeordnet ist. Die Anwendung (normalerweise PowerShell, aber Sie können auch andere Hosting-Anwendungen verwenden, wenn Sie möchten) führt dann den Befehl aus und gibt die Ergebnisse über den „Listener“ über das Netzwerk und zurück auf Ihren Computer zurück.
Zeig mir wie
Als erstes müssen Sie Remoting auf dem Computer aktivieren, zu dem Sie eine Verbindung herstellen möchten. Dies kann durch Ausführen der folgenden Schritte erfolgen:
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 in den automatischen Modus.
- Es wird ein HTTP-Listener erstellt, der an alle Ihre Netzwerkkarten gebunden ist.
- Außerdem wird eine eingehende Firewall-Ausnahme für das WS-MAN-Protokoll erstellt.
- Einige Standardsitzungskonfigurationen werden erstellt
Wenn Sie Windows 7 ausführen und der Speicherort Ihrer Netzwerkkarte auf «Öffentlich» eingestellt 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 Ihnen jedoch, Ihren 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-Viele-Methode.
Verwenden einer PowerShell-Sitzung
Die erste Möglichkeit, mit PowerShell eine Verbindung zu einem Remotecomputer herzustellen, ist die Verwendung einer sogenannten PowerShell-Sitzung. Wenn Sie einfach eine Sitzung einfügen, können Sie Befehle auf dem Remotecomputer auf interaktive Weise ausführen, ähnlich wie Sie es auf Ihrem eigenen Computer tun würden. Um eine Sitzung zu öffnen, geben Sie einfach Folgendes ein:
Enter-PSSession – Computername «Darlah»

Die Eingabeaufforderung erhält ein Präfix, das den Computer angibt, auf dem Sie die Cmdlets ausführen.

Von hier aus können Sie die Eingabeaufforderung wirklich so behandeln, als würden Sie an der Remote-Maschine sitzen. Wenn Sie beispielsweise alle Dateien auf dem Laufwerk C: anzeigen möchten, können Sie Folgendes ausführen:
Get-ChildItem –Path C:

Wenn Sie einen Linux-Hintergrund haben, können Sie sich vorstellen, diese Eins-zu-Eins-Remoting-Methode als PowerShell-Alternative zu SSH zu verwenden.
Verwenden des Invoke-Befehls
Die zweite Möglichkeit, PowerShell auf einem Remotecomputer zu verwenden, ist die Verwendung von Invoke-Command. Der Vorteil der Verwendung von Invoke-Command besteht darin, dass Sie denselben Befehl auf mehreren Computern 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-Command -ComputerName Darlah, localhost -ScriptBlock {Get-EventLog-Anwendung -Newest 2}

Da der Befehl auf allen Computern parallel ausgeführt wird, müssen Sie feststellen, von welchem PC ein bestimmtes Ergebnis stammt. Sie können dies tun, indem Sie sich die PSComputerName-Eigenschaft ansehen.

Wenn Sie Invoke-Command verwenden, haben Sie nicht mehr die Objekte, die Sie in der Pipeline erwarten könnten. Damit PowerShell die Informationen vom Remotecomputer zurück auf Ihren Computer übertragen kann, müssen die Objekte dargestellt werden, die der Befehl, den Sie auf dem Remotecomputer ausgeführt haben, ausgibt. Heutzutage scheint die Wahl der Darstellung einer hierarchischen Datenstruktur 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 Computer zurückgesendet werden. Sobald sie zu Ihrer Maschine zurückkehren, werden sie wieder in ein Objekt deserialisiert. Das Problem hierbei ist, dass beim Deserialisieren alle Methoden außer der ToString () -Methode, die das Objekt hatte, entfernt werden.

Hausaufgaben