Windows Tools, die man kennen sollte – Windows Remoteverwaltung, Teil 3 Remoteverwaltung von Windows Server über die PowerShell 2.0
Die auf .NET 2.0 basierende PowerShell ist die „Weiterentwicklung“ des Kommandozeilenaufrufs („Dos-Box“) und von Windows Skripting Host (WSH). Ähnlich wie bei Unix-Shells unterstützt sie Pipes und Filter, sowie die objektorientierte Programmierung. Dieser Artikel soll ein Leitfaden zur Remoteverwaltung darstellen und mehr Administratoren überzeugen mit der PowerShell 2.0 zu arbeiten.
Anbieter zum Thema
Voraussetzung für die Remote-Session ist der WinRM-Dienst auf dem Client und Server. Da der Dienst auf dem Client voreingestellt gestoppt ist, muss er erst noch gestartet werden. Auf dem Windows Server 2008 R2 (auch Versionen 2003 R2 und 2008) ist er bereits gestartet. Auf beiden Computern wird der WinRM-Dienst anschließend konfiguriert und die entsprechenden Ports in der Firewall müssen geöffnet werden. Die Remoteverwaltung ist ein Feature von PowerShell 2.0, d.h. die Remote-Tools für Windows 7 SP1 sind nicht zwingend notwendig. Unabhängig von der PowerShell sind diese Remotetools aber empfehlenswert.
Für die Aktivierung gibt es mehrere Lösungen, die PowerShell-Variante könnte wie Folgt aussehen: Zunächst wird überprüft, ob der WinRM-Dienst auf den Computern („-Name“ ist optional) läuft. Dctest ist beispielsweise der remote Windows Server. Der lokale Computer würde „localhost“ oder einfach nur Punkt („.“) heißen.
Get-Service -Name WinRM -ComputerName dctest |Format-Table -Property MachineName, Status, Name, DisplayName -AutoSize
WinRM sollte für Autostart konfiguriert werden:
Set-Service -Name WinRM -ComputerName dctest -StartupType „Automatic“
PowerShell für Remoteverwaltung bereitstellen:
Enable-PSRemoting -force
Selbstverständlich kann die Firewall auch per PowerShell konfiguriert werden, was aber nur in einem längeren Skript funktioniert. Hierfür gibt es im Internet Beispiele. Hierbei sollte aber nicht vergessen werden, die Remote-Administration der Firewall auf dem Zielcomputer freizuschalten.
Die erste Remote-Sitzung
PowerShell 2.0 ist in der Lage, eine interaktive Remotesitzung durchzuführen. Über die PowerShell-Sitzung können dann beliebig viele Befehle auf den verbunden Servern oder Workstations abgesetzt werden. Das Schöne – Es funktioniert genauso, als würde man lokal an diesem Computer angemeldet sein. So gilt Vorsicht, die PowerShell-Module auf dem remote Computer unterscheiden sich höchstwahrscheinlich von denen des lokalen Computers, und da die Konsole optisch – lokal wie remote – ähnlich aussieht, kann man sich am Anfang manchmal wundern.
Für jede PowerShell-Konsole ist nur eine interaktive Sitzung erlaubt. Eine weitere interaktive Sitzung bedeutet auch eine neue Konsole. Es dürfen bis zu 5 parallele Sitzungen zu einem Host geöffnet sein. Gemäß der durchgängigen PowerShell-Syntax merkt man sich das Command „PSSession“. In Verbindung mit dem wichtigsten Befehl get-help
Eine neue Sitzung ist eingerichtet unter (Beispiel siehe Abbildung 1):
New-PsSession -name
Beispiel:
New-PsSession -name RemoteDCTEST -computername dctest
Mit dem folgenden Cmdlet kann dann die Sitzung gestartet warden:
Enter-PSSession -ComputerName Beispiel: Enter-PSSession -ComputerName dctest -Credential feierabend\administrator Die remote Sitzung ist nun offen und kann ganz normal verwendet werden. Beendet wird die Sitzung mit dem Befehl: Exit-PSSession Möchte man einzelne Befehle auf mehrere Computer verteilen, muss man das Invoke-Command verwenden. Hier am Beispiel eines Computers: $MySession = New-PSSession -ComputerName Beispiel: Aufzeigen aller Dienste, die nicht gestartet sind. $MySession = New-PSSession -ComputerName dctestInvoke-Command -Session $MySession -ScriptBlock { Get-Service | Where-Object {$_.status -eq „stopped“} } Werden innerhalb von ScriptBlock {} Variablen definiert, kann nachfolgend innerhalb des Blocks mit diesen Variablen weitergearbeitet werden. Das funktioniert deshalb, weil eine persistente Verbindung zum Remotehost besteht. Als Ausgabe erhält man in diesem Beispiel den WinRM-Dienststatus vom Remote-Computer. Invoke-Command -Session $MySession -ScriptBlock { $var=Get-Service WinRM }Invoke-Command -Session $MySession -ScriptBlock { $var } Möchte man hingegen nur schnell ein Skript ausführen, reicht Folgendes: Invoke-Command -ComputerName Die PowerShell 2.0 glänzt mit einer Vielzahl von Befehlen, die unter anderem Zugriff auf .NET-Framework, WMI-Klassen und COM-Objekte ermöglichen. Hat man sich einmal mit der Komplexität der „Sprache“ angefreundet, gelingen auch umfangreiche Skripte. (ID:2052547)Von der lokalen Sitzung auf dem Remote-Computer einen Befehl ausführen
Fazit:
Artikelfiles und Artikellinks