Windows Server remote per Powershell verwalten und Scripts ausführen

Mitglied: mexx

mexx (Level 2) - Jetzt verbinden

26.10.2011 um 16:30 Uhr, 36792 Aufrufe, 1 Kommentar, 3 Danke

Hallo Powershell Freunde,

im Folgenden möchte ich euch zeigen, wie Ihr eure Windows Server Landschaft mit Hilfe von Powershell Scripten und Befehlen remote verwalten könnt. Am Ende dieser Anleitung seid Ihr in der Lage, Befehle und komplexe Powershell Scripte auf den Servern ausführen zu lassen, als würden Sie lokal laufen. Ein Server, der zentral alle Powershell Scripte auf allen anderen Servern ausführt, ermöglicht Monitoring inkl. Reaktion, geplannte Tasks zentral laufen zu lassen und regelmäßige Administrationsaufgaben von einer Quelle aus auf allen Servern durchzuführen.

Schritt 1: Ausgangsbasis schaffen
Um eure Systeme in die technische Lage einer Remoteverwaltung per Powershell zu versetzten, bietet Microsoft ein Installationspaket, welches das Windows Remote Management (WinRM) 2.0, Windows PowerShell 2.0 und den Background Intelligent Transfer Service (BITS) 4.0 beinhaltet, an. WinRM 2.0 ist die Basis für eine Remoteverwaltung aktueller Microsoft Server-Betriebssysteme. WinRM muss sowohl auf dem Client, als auch auf dem Server gestartet, aktiviert und in der Firewall freigeschaltet sein. Bei PowerShell handelt es sich um die aktuelle Befehlszeilenshell von Microsoft ähnlich der bekannten CMD.

Der Download und eine Erklärung zu dem Paket findet Ihr hier: http://support.microsoft.com/kb/968929/de


Schritt 2: Konfiguration
Nach dem Download und der Installation sind ein paar wenige Konfigurationen notwendig, die den Verbindungsaufbau zu den zu steuernden Server erlauben. Öffnet dafür die Powershell in dem Ihr unter Start -> Ausführen "Powershell" eintragt und mit "OK" bestätigt. In der sich öffnenden Powershell führt Ihr zunächst den Befehl...
...aus.

Das Cmdlet "Enable-PSRemoting" konfiguriert den Computer so, dass er Windows PowerShell Remotebefehle empfangen kann, die mit Hilfe der Technologie der WS-Verwaltung gesendet werden. Dieser Befehl muss nur einmal auf jedem Computer ausgeführt werden, der Befehle empfängt. Er muss nicht auf Computern ausgeführt werden, von denen Befehle nur gesendet werden.

Wenn der Befehl erfolgreich durch geführt wurde, solltet Ihr eines der beiden dargstellten Meldungen sehen.
7ef1b1b1fcc76dcf9647be7931c22913 - Klicke auf das Bild, um es zu vergrößern

Um den Server das Ausführen von Powershell Scripten zu gestatten, ist der Befehl...
...notwendig.

Wenn der Befehl erfolgreich ausgeführt wurde, solltet Ihr folgendes Bild sehen.
ed6a095749ec5b1621dd9ced0884892e - Klicke auf das Bild, um es zu vergrößern

Bestätigt die Erlaubnis des Script Ausführens mit "J".


Schritt 3: der erste Verbindungsaufbau

Um den Erfolg der im Schritt 1 und Schritt 2 aufgeführten Schritte sicher zu stellen, startet bitte eine Powershell auf euren lokalen PC und führt folgenden Befehl aus.
Mit dem Befehl "New-PSSession" wird eine Windows PowerShell-Sitzung, oder auch PSSession, auf einem lokalen Computer oder einem Remotecomputer erstellt. Wenn Ihr eine PSSession erstellt, wird von Windows PowerShell eine dauerhafte Verbindung mit dem Remotecomputer hergestellt. Mit den Befehl "Get-PSSession" erhaltet Ihr eine Liste aller erstellten Powershell Remote Sitzungen. Eine PSSession erhält neben den Namen eine ID, welche man beim Verweden der Session benötigt. In meinen Beispiel weiße ich der Variable $SESSION gleich die PSSession zu, um die Instanz anzusprechen. Um die PSSession zu nutzen, ist folgender Befehl notwendig.
Wenn der Befehl erfolgreich ausgeführt wurde, trägt eure Powershellconsole den Namen das verbundenen Servers in der Eingabezeile. Achtet zukünftig immer darauf, in welcher Session Ihr euch befindet! In dieser Sitzung sind nun alle Befehle möglich, die euch die Powershell bietet. Ein einfacher Test wäre folgender Befehl zum Auslesen der Systemvariable %COMPUTERNAME%
Wenn der Befehl erfolgreich ausgeführt wurde, sollte als Ergebnismenge der Name des Servers erscheinen.
Verlasst nun die PSSession mit den Befehl...
Um eine PSSession entgültig zu schließen, genügt das beendet des Powershellfensters oder der Befehl...
Schritt 4: Der Weg zum Remotescript

Im Schritt 3 habe ich euch erklärt, wie Ihr per Powershell eine Powershell Remote Sitzung (PSSession) auf Server aufbaut und mit einfachen Befehlen füttert. Leider hat diese Methode einen Nachteil. Ergebnismengen durchgeführten Befehle stehen nur in der aktuellen Sitzung zur Verfügung oder anders ausgedrückt, jede PSSession ist für sich allein gestellt.

Ein Beispiel: Ihr öffnet eine PSSession und verbindet euch. In der PSSession führt Ihr den Befehl...
...aus. Die Variable trägt nun die Datenmenge aus der Funktion Get-Process, welche Ihr mit...
einsehen könnt. Wenn der Befehl erfolgreich durchgeführt wurde, seht Ihr eine Liste der aktiven Prozesse des Servers. Verlasst nun die PSSession mit den Befehl...
Genau hier, stossen wir nun an die Schwachstelle dieser Methode. Die Ergebnissmenge ist nur in der aktiven PSSession vorhanden. Führt Ihr die Ausgabe der Variable $SERVER_PROCESS_LIST erneut aus, seht Ihr kein Ergebnis. Die bis hier hin beschriebene Methode ermöglicht euch Einmalergebnise auszulesen oder Befehle auszuführen, die das Verhalten des Servers beeinflussen. Das allein ist ein schlagkräftiges Verwaltungsinstrument. Wenn Ihr aber, wie in meinen Beispiel die Prozessliste des Server auch in der lokalen Session behalten wollt, benötigt Ihr den Befehl "Invoke-Command". Der Befehl ermöglicht euch das Ausführen eines Befehls in einer Sitzung ohne die Sitzung explizit betreten zu müssen.

Für diesen Vorgang ist dennoch eine verbundene PSSession zum Server notwendig. Führt dazu den aus Schritt 3 bekannten Befehl...
...zum Erstellen einer PSSession aus.

Mit folgenden Befehlsbeispiel könnt Ihr die Processliste des Servers in der PSSession ausführen und die Datenmenge der Variable $SERVER_PROCESS_LIST speichern.
Der Befehl Invoke-Command verbindet sich im Hintergrund mit der erzeugten PSSession, führt den Befehl aus, weißt die Ergebnismenge der Variable $SERVER_PROCESS_LIST zu und verläßt die PSSession wieder.

Schritt 5: Das erste Remotescript
Einen einzelnen Befehl an einen Server per Powershell Remote zu schicken, der diesen Befehl ausführt, als würde er lokal auf den Server laufen, ist ohne Frage ein sehr mächtiges Instrument, aber die Möglichkeit ein Script mit einer komplexen Abfolge von Befehlen inklusive Reaktion auf die ermittelten Informationen auf einen oder mehreren Servern laufen zu lassen, ist der heilige Gral der Remoteverwaltung.

Ein Einsatzbeispiel:
Auf einen oder mehrere Windows Server läuft ein Lizenzdienst oder ein Process, welcher die unangenehme Eigenschaft besitzt nach einer unbestimmten Zeit einzufrieren und damit wichtige Funktionen der Infrastruktur lahm zu legen. Um das Problem in den Griff zu bekommen, brauchen wir nur zwei Dinge. Ein Script, welches den Dienst überwacht und bei einen Fehlverhalten reagiert und dieses Script soll per PSSession laufen.

In meinen Beispiel verwende ich den Druckerdienst. Den folgenden Code könnten Ihr 1:1 in eine PS1 kopieren.
Speichert die Datei als WatchSpooler.ps1 ab. Nun greifen wir auf das Wissen aus den vorhergegangenen Schritten zurück.

Sitzungsaufbau
Script ausführen
Nun wird jede Sekunde der Status des Druckerdienstes auf den Server beobachtet und im Falle eines Einfrierens beendet und neu gestartet.

Schritt 5: mehrere Server verwalten
Um nun ein Script oder einen Befehl auf mehreren Servern durchführen zu können, benötigen wie eine PSSession pro Server. Der Befehl Invoke-Command, kann mit den Parameter -Session mehrere PSSessions betreuen. Hier ein Beispiel.

Sitzungsaufbau zu zwei Servern
</code>
New-PSsession -ComputerName SERVERNAME1 -credential DOMAIN/USERNAME
New-PSsession -ComputerName SERVERNAME2 -credential DOMAIN/USERNAME
</code>
Script oder Befehl auf beiden Servern ausführen
Ergebnis:
31397a3108b41e5011b7e8bf9a52f350 - Klicke auf das Bild, um es zu vergrößern

Nun seid Ihr in der Lage, jede Form der Abfragen oder Befehlsfolgen von einen Server aus, auf anderen Servern laufen zu lassen. Bei Fragen, Wünschen oder Anregungen, zögert nicht mich zu kontaktieren.

Viel Erfolg!
Mitglied: colinardo
05.11.2011 um 15:01 Uhr
Schöner Artikel !

Hinzuzufügen wäre noch folgendes:

Für den Fall das sich die Rechner nicht in einer Domäne befinden, muss auf dem Client der zu verwaltende Server in die "TrustedHosts"-Liste eingetragen werden - ansonsten schlägt die Verbindung zum Server fehl. Dies kann mit folgendem Befehl in der Powershell (in einer normalen Shell dürfen die einfachen Anführungszeichen nicht verwendet werden) erledigt werden:
Grüße Uwe
Bitte warten ..
Heiß diskutierte Inhalte
Hardware
Outdoor LAN sichern mit oder ohne Fritzbox Verständnis Frage
bluescreenVor 1 TagFrageHardware17 Kommentare

Hallo zusammen, ich habe die letzten Stunden schon viel hier gelesen, stehe aber ein wenig auf dem Schlauch, wie und wo ich weiter suchen ...

Windows 10
Windows 7 pro Lizenz nutzen für Windows 10
lukas0209Vor 23 StundenFrageWindows 1015 Kommentare

Hallo Community, ich versuche seit einigen Wochen unser Netzwerk von Windows Server 2008 R2 Standard auf Windows Server 2016 Essentials um, welches eine städtische ...

Windows Netzwerk
Telefone im Netzwerk bekannt machen
jannik0205Vor 1 TagFrageWindows Netzwerk13 Kommentare

Hallo Zusammen, In unserem Unternehmen gibt es eine Telefonanlage mit eigenem Telefonienetz (192.168.5.X). Schließe ich ein Telefon an eine Netzwerkdose, bekommt es vom DHCP- ...

Netzwerkgrundlagen
Frage zu LWL Kabel
gelöst NominisVor 1 TagFrageNetzwerkgrundlagen6 Kommentare

Hallo, ich habe nur mal eine kurze Verständnisfrage. Es geht um die Verbindung bzw. Anbindung von Switches (Cisco 48Port 10/100/1000 MBit mit 2 SFP+ ...

Windows Netzwerk
WTS-Anmeldung per RDP am Wochenende verbieten?
MuM2810Vor 1 TagFrageWindows Netzwerk8 Kommentare

Hallo zusammen, wir haben bei uns Windows Server 2016 mit 2 Terminal Servern im Einsatz. Wie aus dem Titel schon ersichtlich ist, ist bei ...

Microsoft
Microsoft Teams - "bitte wenden Sie sich an (. . .) um Teams für "domäne" zu aktivieren" nur bei einem Benutzer
eastfrisianVor 1 TagFrageMicrosoft6 Kommentare

Hallo zusammen! Wir haben bei uns Teams als Hybridversion eingeführt (Exchange on premise, AD-Sync in die Cloud) und nutzen Teams über das basic-Abonnement. Während ...

Netzwerke
Keine Versand von Mails von der Firmen zur Privaten E-Mailadresse möglich
blaub33r3Vor 1 TagFrageNetzwerke6 Kommentare

Hallo zusammen, wieso kommt der User keine Mails mehr? Der Sender wird als Spamer betrachtet? 1. Mailing an andere Privaten Adressen / Firmen Adressen ...

Netzwerke
Netzwerklaufwerk - Nur Lesen (Streamen)
CryexXVor 23 StundenFrageNetzwerke8 Kommentare

Hallo, ich hab mal ne Frage und hoffe auf Lösung. Mir schießt aktuell keine in den Kopf :( Ich möchte ein Netzlaufwerk freigeben. Auf ...