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.

Autor/in Raúl B. Heiduk
Datum 31.03.2023
Lesezeit 7 Minuten

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 Digicomp

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:

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:


Autor/in

Raúl B. Heiduk

Raúl B. Heiduk ist Dipl. Ingenieur (FH) und ausgewiesener Microsoft Specialist (MCP, MCSA, MCES, MCT, MCTS, MCITP, MCD). Zu seinen Spezialisierungsgebieten zählen System- und Netzwerkarchitektur, Collaborative Solutions, Software-Paketierung und -Verteilung, Scripting und Automatisierung. Sein Wissen und seinen reichen Erfahrungsschatz gibt er als Trainer bei der Digicomp seit vielen Jahren leidenschaftlich weiter.