Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Windows Server remote per Powershell verwalten und Scripts ausführen

Mitglied: mexx

mexx (Level 2) - Jetzt verbinden

26.10.2011 um 16:30 Uhr, 33545 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...
01.
Enable-PSRemoting -force 
...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...
01.
Set-ExecutionPolicy remotesigned 
...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.
01.
$SESSION = New-PSsession -ComputerName SERVERNAME -credential DOMAIN/USERNAME
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.
01.
Enter-PSSession $SESSION
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%
01.
(Get-ChildItem env:Computername).Value
Wenn der Befehl erfolgreich ausgeführt wurde, sollte als Ergebnismenge der Name des Servers erscheinen.
Verlasst nun die PSSession mit den Befehl...
01.
Exit
Um eine PSSession entgültig zu schließen, genügt das beendet des Powershellfensters oder der Befehl...
01.
Remove-PSSession $SESSION
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...
01.
$SERVER_PROCESS_LIST = Get-Process
...aus. Die Variable trägt nun die Datenmenge aus der Funktion Get-Process, welche Ihr mit...
01.
$SERVER_PROCESS_LIST
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...
01.
Exit
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...
01.
$SESSION = New-PSsession -ComputerName SERVERNAME -credential DOMAIN/USERNAME
...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.
01.
$SERVER_PROCESS_LIST = Invoke-Command -session $SESSION -scriptblock {Get-Process}
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.
01.
$Process = Get-Service "Spooler" 
02.
$PROCESS_NAME = $Process.DisplayName 
03.
$Servername = (Get-ChildItem env:Computername).Value 
04.
 
05.
$StopFound = "false" 
06.
$StartTime = Get-Date 
07.
while (1 -eq 1)  
08.
09.
 
10.
  if (((Get-Service $PROCESS_NAME).Status) -ne "Running") 
11.
   {   
12.
    Start-Sleep -Seconds 10              
13.
    if ($StopFound -eq "false") 
14.
15.
      $StopFound = "true" 
16.
      $StopTime = Get-Date       
17.
18.
     
19.
         
20.
    $FreezeTime = (New-TimeSpan $StopTime (Get-Date)) 
21.
    Write-Host -Foreground Red $PROCESS_NAME auf $Servername": no responding for" $FreezeTime.Seconds "secounds"     
22.
    if ($StopFound -eq "true") 
23.
     {      
24.
      if ([int]$FreezeTime.Seconds -ge 3) 
25.
26.
        Write-Host -Foreground Red $PROCESS_NAME auf $Servername": killing" 
27.
        $LastStartTime = Get-Date 
28.
        Write-Host -Foreground Green $PROCESS_NAME auf $Servername": restarting" 
29.
        $Process.Start() 
30.
        $StartTime = Get-Date         
31.
        Start-Sleep -Seconds 20 
32.
        $StopFound = "false" 
33.
        $RestartTime = Get-Date -f "dd-MM-yy HH:mm"         
34.
35.
36.
   } else 
37.
38.
    Start-Sleep -Seconds 1 
39.
    $RunDate = Get-Date 
40.
    Write-Host -Foreground Green $PROCESS_NAME auf $Servername": responding since" (New-TimeSpan $StartTime $RunDate).Days "days" (New-TimeSpan $StartTime $RunDate).Hours "hours" (New-TimeSpan $StartTime $RunDate).Minutes "minutes" 
41.
    $StopFound = "false"     
42.
43.
 }
Speichert die Datei als WatchSpooler.ps1 ab. Nun greifen wir auf das Wissen aus den vorhergegangenen Schritten zurück.

Sitzungsaufbau
01.
$SESSION = New-PSsession -ComputerName SERVERNAME -credential DOMAIN/USERNAME
Script ausführen
01.
Invoke-Command -Session $SESSION -Filepath "WatchSpooler.ps1"
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
01.
Invoke-Command -Session (Get-PSSession) -Filepath "WatchSpooler.ps1"
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:
01.
winrm set winrm/config/client '@{TrustedHosts="SERVERNAME"}' 
Grüße Uwe
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Powershell: Googlemail (GMail) nativ mit Powershell verwalten

Anleitung von colinardoBatch & Shell2 Kommentare

1. Vorwort Google bietet über die GMail-API die Voraussetzungen um sein Google-Mail-Konto über diverse Programmierschnittstellen (PHP/Javascript/etc. pp) zu verwalten. ...

Batch & Shell

Powershell: Fritz!Box Telnet-Befehle ausführen lassen

Tipp von colinardoBatch & Shell

Für alle die es brauchen können und keine externen Tools außer nativer Powershell verwenden möchten, hier eine Funktion die ...

Windows Server

Microsoft Honululu heißt jetzt Windows Admin Center - und man kann damit Windows-Clients und -Server verwalten

Information von FrankWindows Server4 Kommentare

Microsofts Projekt "Honululu" ist fertig und hat seinen finalen Namen bekommen: Windows Admin Center. Es ist eine browserbasierte Oberfläche ...

Windows Server

Windows 2012 Core Server remote administrieren

Anleitung von SystembastlerWindows Server

Hallo Community, ich habe im Netz nicht alle relevanten Einstellungen in einem Beitrag gefunden und deshalb schreibe ich das ...

Neue Wissensbeiträge
Internet

Europa baut Zensurinfrastruktur auf: EU-Parlament stimmt für Upload-Filter, Leistungsschutzrecht und gegen KI-Forschung

Information von Frank vor 2 TagenInternet9 Kommentare

Eine sehr schlechte Entscheidungen für die Zukunft Europas ist gefallen: Der Rechtsausschuss im EU-Parlament stimmte heute morgen in einer ...

Windows 10

Mikrofon von Headset geht nach Update auf Windows 10 1803 nicht mehr

Tipp von Deepsys vor 4 TagenWindows 102 Kommentare

Ich verwende ein Plantronics Headset das per USB mit dem Windows 10 PC verbunden ist. Damit kann ich auch ...

Video & Streaming

Ruckelfreies Fernsehen auf Smartphone oder Tablet - in SD oder gar HD - Eine Alternative zum Fritz DVB-C Receiver

Anleitung von power-user vor 5 TagenVideo & Streaming9 Kommentare

Wer kennt das nicht: Man möchte gemütlich auf dem Balkon sitzen und vielleicht grillen und dabei das WM-Spiel gucken ...

Erkennung und -Abwehr
Trendmicro WFBS 10 ist in deutsch verfügbar!
Tipp von VGem-e vor 5 TagenErkennung und -Abwehr4 Kommentare

Servus Kollegen, downloadbar unter

Heiß diskutierte Inhalte
Netzwerke
Netzwerkkommunikation von Windows 10 aus Freigabe mit Windows XP funktioniert nicht
gelöst Frage von KLinnebankNetzwerke14 Kommentare

Hallo werte Gemeinde, ja, es ist Freitag. Aber das ist KEINE Freitagsfrage Ich habe ein für mich völlig wirres ...

Festplatten, SSD, Raid
Server Architektur mit RAID 5 - wozu interne Platten?
Frage von Pierre78Festplatten, SSD, Raid10 Kommentare

Hallo, ich beschäftige mich gerade mit RAID Systemen. Ich habe mir einen gebrauchten Dell PowerEdge R515 gekauft. Dieser hat ...

DSL, VDSL
886VA und VDSL 50
Frage von agent00nixDSL, VDSL9 Kommentare

Ich bekomme nicht die vertraglich vereinbarten 50 Mbit/s US sondern nur 15 Mbit/s Was mache ich falsch ? Hier ...

Samba
Netzlaufwerk über VPN hat Probleme
Frage von geocastSamba8 Kommentare

Hallo Zusammen Ich habe hier ein QNAP TS-269 Pro (aktuellste Firmware) NAS in einem entfernten Standort, der über VPN ...