© DrHitch/Shutterstock.com
PowerShell

2 Praxisbeispiele aus dem DevOps-Alltag


Nachdem im vorherigen Kapitel die Grundlagen der PowerShell-Benutzung erklärt wurden, folgen nun die Praxisbeispiele. Dabei liegt der Fokus nicht auf komplexeren Skriptingaufgaben, sondern auf den einfachen, aber mächtigen Tricks, die man im Entwickleralltag mal schnell aus dem Hut ziehen kann. Dieses Kapitel erklärt, wie PowerShell Remoting und die Integration mit COM und WMI/CIM funktioniert. Weiter werden das Providermodell und die Arbeit mit SOAP und REST Web Services vorgestellt. Abgerundet wird der Artikel mit einer Sammlung von PowerShell-Snippets für den Alltag.

Die PowerShell ist ein Kommandozeileninterpreter für Windows. Sie wird mit dem Windows-Betriebssystem ausgeliefert und ist in vielen Produkten, wie SharePoint, TFS oder Exchange Server, integriert. Weil die PowerShell auf dem .NET Framework aufgebaut ist und Schnittstellen zur Windows Management Instrumentation (WMI), dem Component Object Model (COM), der Registry und vielen anderen Komponenten anbietet, können komplexe Aufgaben mithilfe der PowerShell oft mit einem einzigen Befehl erledigt werden. Diese Befehle lassen sich sowohl lokal als auch remote ausführen.

PowerShell-Befehle – auch Commandlet (Cmdlet) genannt – können über den Pipe-Operator | miteinander verbunden werden. Die PowerShell kommt mit einer Fülle von Cmdlets, die beispielsweise zur Formatierung der Ausgabe verwendet werden können.

Folgendes Beispiel zeigt einen Befehl, der vom lokalen Rechner die ersten zehn Windows Services ermittelt und deren Namen und Status als HTML-Datei ausgibt. Das Resultat ist in Abbildung 2.1 zu sehen.

PS C:\> Get-Service | Select-Object Name, Status -First 10 |Sort-Object Status -Descending | ConvertTo-Html | Out-File "D:\ServiceReport.html"
image

Abbildung 2.1: Das Resultat der Get-Service-Abfrage mit „ConvertTo-Html“ im Edge-Browser

Script Execution Policy

Grundsätzlich ist die Ausführung von PowerShell-Skripten abgeschaltet. Mit dem Cmdlet „Set-ExecutionPolicy“ kann die Skriptausführung erlaubt werden. Folgende Werte können gesetzt werden:

  • Restricted: Keine Scripts können ausgeführt werden
  • AllSigned: Nur Skripte, die von einem Trusted Publisher signiert wurden, dürfen ausgeführt werden
  • RemoteSigned: Heruntergeladene Skripte müssen von einem Trusted Publisher signiert sein
  • Unrestricted: Alle Skripte können ausgeführt werden
  • Damit sich die „ExecutionPolicy“ ändern lässt, muss die PowerShell mit administrativer Berechtigung ausgeführt werden.

PowerShell Remoting

Ein großer Anteil der Power in der Shell kommt daher, dass Cmdlets mit wenig Aufwand auch auf Remote-Maschinen ausgeführt werden können. Der Zielrechner muss dabei für PowerShell Remoting vorbereitet sein, indem unter anderem der Windows-Remote-Management-Service eingeschaltet wird. Mit dem Cmdlet Test-WSMan –ComputerName kann überprüft werden, ob der Zielrechner PowerShell-Anfragen entgegennehmen kann. Ist dies nicht der Fall, kann Remoting mit Enable-PSRemoting –force eingeschaltet werden. Dabei wird der benötigte Windows-Service gestartet, ein Listener registriert und Firewallports geöffnet.

Die PowerShell bietet mehrere Möglichkeiten, um auf andere Rechner zuzugreifen.

Mit dem Enter-PSSession Cmdlet wird eine PowerShell-Session auf dem Zielrechner geöffnet, vorausgesetzt, die Berechtigung ist vorhanden. Mit der Option -Credentials kann ein Benutzername angegeben werden, und die PowerShell erfragt das dazugehörende Passwort. Sobald die Verbindung steht, können Cmdlets normal ausgeführt werden (Listing 2.1).

Gewisse Cmdlets unterstützen von sich aus die Ausführung auf einem anderen Rechner. Das Öffnen einer Remote-Session ist dann nicht mehr nötig. Listing 2.1 zeigt ein Beispiel mit dem Get-Process Cmdlet. Dabei wird mit dem Argument -Computername der Name des Zielrechners übergeben.

Noch spannender wird PowerShell Remoting wenn ein Befehl gleichzeitig auf mehreren Rechnern ausgeführt wird. Dem Cmdlet Invoke-Command kann ein Skriptblock übergeben werden, der einen weiteren Befehl enthält. Mit der Option –ComputerName können ein oder mehrere Zielrechner angegeben werden (Listing 2.1).

#Variante 1: Enter-PSSession
#Öffnen einer Remoting Session auf Zielrechner LTMME05
PS C:\> Enter-PSSession –ComputerName LTMME05

#Der Rechnername wird in der Eingabeaufforderung angezeigt und
#Befehle können auf dem Remote-Rechner ausgeführt werden.
[LTMME05] PS C:\> hostname
LTMME05

#Variante 2: Cmdlet mit Option –Computername
PS C:\> Get-Process -ComputerName LTMME05 | Select-Object -First 1
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI Proces...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang