PowerShell Skripte erstellen: Einführung in die 4 wichtigsten Cmdlets
PowerShell bietet mit den Cmdlets eine mächtige Sprache, mit der sich Befehle zu komplexen Skripten verknüpfen lassen. Raúl B. Heiduk führt Sie in die vier wichtigsten Cmdlets ein und zeigt, wie Sie damit Routineaufgaben automatisieren.
Was sind Cmdlets?
PowerShell verfügt über zahlreiche eingebaute Befehle, die sogenannten Cmdlets (sprich: Commandlets). Ein Cmdlet besteht immer aus einem Verb, einem Substantiv (Singular) und einer Liste von Parametern. Diese Syntax ist konsistent, d.h. wenn Sie die Grundlagen verinnerlicht haben, verstehen Sie das Framework und können Skripte in PowerShell erstellen.
Selbst komplexe Skripte schreiben Sie schnell und mühelos, denn die Tabulatortaste auf Ihrer Tastatur dient als «magischer Helfer»: Mit einem Klick auf die Taste schlägt PowerShell bereits Befehle vor, wenn Sie diese noch nicht geschrieben haben.
PowerShell erkennt auch DOS-Befehle, was DOS-Affine zunächst freuen dürfte. Aber: Diese liefern reinen Text, den man zwar lesen, aber nicht verarbeiten kann.
Anders die Cmdlets: Sie liefern keinen reinen Text, sondern Objekte. Auf deren verschiedene Eigenschaften (Grösse, Name, letztes Änderungsdatum) kann man nicht nur zugreifen, sondern auch verschiedene Methoden (öffnen, schliessen, kopieren, löschen) anwenden. Insofern bieten die PowerShell-Befehle einen grossen Mehrwert gegenüber den DOS-Befehlen.
Die 4+1 wichtigsten Cmdlets
PowerShell bietet mehr als 100 grundlegende Cmdlets, und Sie können Ihre eigenen Cmdlets schreiben und mit anderen teilen. Um Skripts in PowerShell erstellen zu können, sollten Sie die folgenden vier Cmdlets kennen.
1 «get-member»
Zum Abrufen der Eigenschaften von Objekten ist «get-member» das richtige Cmdlet. Sie müssen dieses Cmdlet mit dem Befehl kombinieren, der das gewünschte Objekt anfordert, zum Beispiel:
get-date | get-member
Der senkrechte Strich bedeutet in diesem Fall «weiterleiten». Mit der Ausführung dieses Skripts erhalten Sie alle Eigenschaften, die dem Objekt Datum zugeordnet sind.
2 «get-command»
Mit dem Cmdlet «get-command» werden alle auf dem Computer installierten Befehle abgerufen. Verwenden Sie Wildcards, um die Suche einzugrenzen, zum Beispiel um nur Befehle zu suchen, die mit dem Buchstaben i beginnen:
get-command *i
3 +1 «get-help» und «update help»
Wenn Sie Hilfe zu einem Cmdlet benötigen, fordern Sie diese mit «get-help» an. Beachten Sie jedoch, dass die Hilfe beim Auspacken des Betriebssystems noch nicht installiert ist. Daher benötigen Sie zunächst den +1-Kommando «update help». Wenn Sie die Hilfe für einen Server benötigen, der nicht mit dem Internet verbunden ist, speichern Sie die Hilfe lokal. Rufen Sie dann die Hilfe für ein Cmdlet auf, zum Beispiel:
Get help | get-date
Die angezeigte Hilfe ist nicht immer verständlich, daher ist es hilfreich, Beispiele anzufordern:
Get help | get-date - Beispiele
4 select-object *
Mit dem Cmdlet «select-object» fordern Sie die Eigenschaftswerte eines ausgewählten Objekts an. Damit schränken Sie Ihre Suche ein. Sie können beispielsweise nach Eigenschaftswerten suchen, die mit dem Buchstaben d beginnen und mit e enden:
get-date | select-object d*e
So erstellen Sie Automatismen mit Cmdlets
Mit den Cmdlets können Sie nun auf einfache Weise Automatismen für bestimmte Aufgaben erstellen. Beispielsweise können Sie alle Dienste automatisch starten lassen, deren Start-Typ auf «automatisch» gesetzt ist, die aber noch nicht gestartet wurden.
Hierzu suchen Sie zunächst nach der benötigten Eigenschaft:
get-service | get-member
In der angezeigten Liste sehen Sie, dass die benötigte Eigenschaft «StartType» heisst. Suchen Sie nun nach dem richtigen Bezeichung für den Status «automatisch»:
get-service | select-object
In den Suchergebnissen finden Sie schnell den Status «automatisch». Nun listet Sie alle Dienste auf, bei denen der Start-Typ auf «automatisch» steht. Dazu benötigen Sie das gängige Cmdlet «where-object» und eine zugegebenermassen nicht ganz einfache Syntax:
get-service | where-object {$_.StartType -eq «automatic»}
Mit diesem Befehl (eq steht für equal, also gleich) erhalten Sie alle Dienste, deren Start-Typ auf «automatisch» steht. Sie müssen diese jedoch weiter einschränken, da Sie an denen interessiert sind, die nicht gestartet werden, also «not equal running» sind.
get-service | where-object {$_.StartType -eq «automatic» _and $_.Status _ne «running»}
Mit diesem Skript erhalten Sie alle Dienste, die den Start-Typ «automatisch» haben, aber nicht gestartet sind. Verwenden Sie das Cmdlet «start-service», um dieses Problem zu beheben:
get-service | where-object {$_.StartType -eq «automatic» _and $_.Status _ne «running»} | start-service
Mit dieser einen Zeile haben Sie das bestehende Problem gelöst!
Erstellen eines benutzerdefinierten Cmdlets
Sie können nun Ihr eigenes Cmdlet aus dem Skript erstellen, das Sie gerade geschrieben haben. Kopieren Sie dazu das Skript in den Editor. Geben Sie vor dem Befehl an, dass es sich um eine neue Funktion handelt, und geben Sie ihr einen aussagekräftigen Namen:
function Start-AllStoppedAutoService
Speichern Sie diesen Text z.B. unter dem Namen «MyModules-psm1». Der Speicherort ist der, der für PowerShell-Module vorgesehen ist (z.B. C: Windows: System 32: Windows PowerShell: v.1.0: Modules).
Hier legen Sie ein neues Verzeichnis für Ihre Module an. Voraussetzung ist, dass der Name des Verzeichnisses dem Namen der darin enthaltenen psm1-Datei entspricht, in unserem Fall also «MyModules».
Damit haben Sie die PowerShell um ein Modul erweitert. Dieses neue Skript ist nun in Ihrer Liste aller Cmdlets enthalten.
Lesen Sie auch: Warum alle System-Admins PowerShell lernen sollten
Starten Sie Ihre PowerShell Lernreise mit DigicompMit unseren interaktiven und praxisorientierten Trainings werden Sie zum PowerShell Pro. Egal ob Sie gerade beginnen oder sich fortgeschrittene Kenntnisse aneignen möchten, wir haben für jedes Bedürfnis das richtige Trainingsangebot: |
Mit unseren interaktiven und praxisorientierten Trainings werden Sie zum PowerShell Pro. Egal ob Sie gerade beginnen oder sich fortgeschrittene Kenntnisse aneignen möchten, wir haben für jedes Bedürfnis das richtige Trainingsangebot: