Tutorial zur Skripterstellung mit Windows PowerShell für Einsteiger

Automatisieren wir das doch. Wo ist gleich noch mal das Skript dafür …
Warnhinweis: PowerShell macht süchtig.

Tutorial zum Einstieg in PowerShell

Windows PowerShell ist ein objektorientiertes Automatisierungstool und eine Skriptsprache mit interaktiver Befehlszeilen-Shell. IT-Experten können damit Systeme konfigurieren und Verwaltungsaufgaben automatisieren. PowerShell ist in allen neueren Windows-Betriebssystemen ab Windows 2008R2 enthalten. Das Erlernen von Windows PowerShell ist ähnlich wie den Umgang mit einem Multifunktionswerkzeug zu lernen. In diesem Artikel erhalten Sie eine Einführung in die Skripterstellung mit PowerShell. Mit Skripts können Sie nahezu jede Verwaltungsaufgabe in Ihrer Windows-Umgebung einfacher ausführen.

Beginnen wir also mit unserer Einführung in PowerShell.

PowerShell stellt sowohl eine Befehlszeile als auch eine integrierte Skriptumgebung (die Integrated Scripting Environment, kurz ISE) bereit:

  • Zum Starten der PowerShell-Befehlszeile geben Sie im Windows-Startmenü unter „Ausführen“ den Befehl „powershell.exe“ ein. Es wird ein Bildschirm angezeigt, der in etwa wie folgt aussieht:

  • Um die PowerShell ISE zu starten, geben Sie im Startmenü unter „Ausführen“ den Befehl „powershell_ise.exe“ ein. Die PowerShell ISE ist für die Arbeit mit der Skriptsprache am besten geeignet, da sie die Syntax farblich hervorhebt, Befehle automatisch vervollständigt und weitere Automatisierungsfunktionen bereitstellt, mit denen sich das Entwickeln und Testen von Skripts vereinfachen lässt.

Vorbereiten der Ausführung von PowerShell-Skripts

PowerShell-Skripts werden in PS1-Dateien gespeichert. Diese Dateien sind so konzipiert, dass Skripts nicht einfach durch Doppelklicken auf eine Datei ausgeführt werden können. Dadurch ist sichergestellt, dass Ihre Systeme nicht durch versehentliches Ausführen einer Skriptdatei beschädigt werden. Zur Ausführung klicken Sie mit der rechten Maustaste auf die Datei und wählen den Befehl „Mit PowerShell ausführen“:

Es gibt außerdem eine Richtlinie, die festlegt, ob Skripts ausgeführt werden dürfen. Sie können diese Ausführungsrichtlinie überprüfen, indem Sie in PowerShell den Befehl „Get-ExecutionPolicy“ ausführen:

Es wird einer der folgenden Werte angezeigt:

  • Restricted: Es dürfen keine Skripts ausgeführt werden. Dies ist die Standardeinstellung, die beim ersten Ausführen des Befehls angezeigt wird.
  • AllSigned: Sie können Skripts ausführen, die von einem vertrauenswürdigen Entwickler signiert wurden. Mit dieser Einstellung müssen Sie vor dem Ausführen eines Skripts bestätigen, dass es tatsächlich ausgeführt werden soll.
  • RemoteSigned: Sie können eigene Skripts oder von einem vertrauenswürdigen Entwickler signierte Skripts ausführen.
  • Unrestricted: Sie können beliebige Skripts ausführen.

Um mit der Arbeit mit PowerShell zu beginnen, müssen Sie zunächst die Richtlinieneinstellung von „Restricted“ zu „RemoteSigned“ ändern. Hierfür verwenden Sie den Befehl „Set-ExecutionPolicy RemoteSigned“:

PowerShell-Cmdlets

Was sind Cmdlets?

Ein Cmdlet ist ein PowerShell-Befehl mit einer vordefinierten Funktion, ähnlich wie ein Operator in einer Programmiersprache. Das müssen Sie über Cmdlets wissen:

  • Es gibt System-Cmdlets, Benutzer-Cmdlets und benutzerdefinierte Cmdlets.
  • Cmdlets geben Ergebnisse als Objekt oder als Array von Objekten aus.
  • Cmdlets können Daten für Analysen abrufen oder Daten mithilfe von Pipes an ein anderes Cmdlet weiterleiten (auf das Konzept der Pipes werde ich noch genauer eingehen).
  • Bei Cmdlets ist die Groß- und Kleinschreibung nicht relevant. Es spielt beispielsweise keine Rolle, ob Sie „Get-ADUser“, „get-aduser“ oder „gEt-AdUsEr“ eingeben.
  • Wenn Sie mehrere Cmdlets in einer Befehlsfolge verwenden möchten, müssen Sie die einzelnen Cmdlets durch ein Semikolon (;) trennen.

Das Format von Cmdlets

Ein Cmdlet besteht immer aus einem Verb (oder einem Wort, das als Verb verwendet wird) und einem Nomen. Die beiden Elemente sind durch einen Bindestrich voneinander getrennt (die „Verb-Nomen-Regel“). Folgende Verben werden häufig verwendet:

  • Get: zum Abrufen
  • Set: zum Definieren
  • Start: zum Ausführen
  • Stop: zum Beenden der Ausführung
  • Out: zur Ausgabe
  • New: zur Erstellung („New“ ist natürlich kein Verb, hat aber die Funktion eines Verbs)

Führen Sie zu Übungszwecken die folgenden Cmdlets aus:

  • Get-Process: Zeigt die derzeit auf Ihrem Rechner ausgeführten Prozesse an:

  • Get-Service: Zeigt eine Liste der Services mit ihrem jeweiligen Status an
  • Get-Content: Zeigt den Inhalt der von Ihnen angegebenen Datei an (Beispiel: Get-Content C:\Windows\System32\drivers\etc\hosts)

Verfügbare Cmdlets

Die gute Nachricht lautet: Sie müssen sich nicht alle Cmdlets merken. Wenn Sie das Cmdlet Get-Help-Category ausführen, wird eine Liste aller verfügbaren Cmdlets angezeigt:

Sie können auch eigene benutzerdefinierte Cmdlets erstellen.

Parameter

Jedes Cmdlet verfügt über verschiedene Parameter, mit denen seine Funktionsweise festgelegt wird. Wenn Sie den Namen eines Cmdlets gefolgt von einem Bindestrich (-) eingeben, schlägt die PowerShell ISE automatisch alle gültigen Parameter zusammen mit ihrem Typ vor:

Mit dem folgenden Cmdlet werden beispielsweise alle Services angezeigt, deren Name mit „W“ beginnt:
Get-Service-Name W*

Wenn Sie die Parameter eines Cmdlets vergessen haben, verwenden Sie einfach ein Skript wie das unten gezeigte. Damit werden die Parameter für das Cmdlet „Get-Process“ angezeigt:

Get-Process | Get-Member

Wird das gesuchte Cmdlet immer noch nicht angezeigt, können Sie die Hilfe aktualisieren und mit folgendem Skript Beispiele für ein Cmdlet abrufen (etwa „Get-Process“):

Update-Help #to update the help data
Get-Help Get-Process -Examples

Aliase

Sie können auch Aliase verwenden, die als Abkürzung für Cmdlet-Namen dienen. Anstelle von „Get-Help“ können Sie beispielsweise auch einfach „Help“ eingeben. Führen Sie die folgenden zwei Befehle aus und prüfen Sie, ob damit dasselbe Ergebnis angezeigt wird:

  • Start-Process notepad
  • start notepad

Um diesen Prozess zu beenden, können Sie entsprechend einen der beiden folgenden Befehle verwenden:

  • Stop-Process -Name notepad
  • spps -Name notepad

Eine Liste aller Aliase können Sie mit dem Cmdlet Get-Alias anzeigen.

Kommentare

Wenn Sie in einem Skript Kommentare verwenden, ist für Sie und Ihre Kollegen schneller ersichtlich, was das Skript bewirkt. Ein Zeichenfolgenkommentar besteht aus einer einzelnen Zeile, die mit einem Nummernzeichen (#) beginnt, Blockkommentare beginnen und enden mit Nummernzeichen und spitzen Klammern und sind mehrzeilig.

Pipes

Eine Pipe leitet Daten von einem Cmdlet zu einem anderen weiter. Ich habe am Anfang dieses Tutorials eine Pipe verwendet, um alle Eigenschaften eines Objekts abzurufen.

Wenn Sie beispielsweise das folgende Skript ausführen, werden alle Services nach Status sortiert angezeigt:

Get-Service | Sort-Object -property Status

Mit einer Pipe können Sie außerdem Text in eine Datei ausgeben. Hierfür verwenden Sie folgendes Skript:

"Hello, World!" | Out-File C:\ps\test.txt

Sie können auch mehrere Pipes verwenden. Mit dem folgenden Skript erhalten Sie eine Liste aller Services. Die erste Pipe sorgt dafür, dass keine angehaltenen Services angezeigt werden, und die zweite Pipe beschränkt die Liste auf die Anzeigenamen:

Get-Service | WHERE {$_.status -eq "Running"} | SELECT displayname
# “$_.” defines current element in the pipe

Zusammenfassung

Fassen wir die wichtigsten Punkte dieses Windows PowerShell-Tutorials noch einmal zusammen. Sie wissen nun, wie Sie PowerShell ausführen, die Ausführungsrichtlinie ändern, was ein Cmdlet ist, wie Sie Daten mit Pipes weiterleiten und wie Sie die Eigenschaften eines Objekts abrufen. Denken Sie daran: Wenn Sie etwas vergessen haben, können Sie stets das Cmdlet „Get-Help“ verwenden.

Ich hoffe, dieses PowerShell-Tutorial für Einsteiger war für Sie hilfreich!

In den nächsten Kapiteln dieses kostenlosen PowerShell-Tutorials geht es um Variablen, Arrays und Zyklen, mit denen bei der Erstellung von PowerShell-Skripts die Administration von Windows-Servern vereinfacht wird.

In der Zwischenzeit können Sie auch die folgenden PowerShell-Skripts ausprobieren, die von IT-Experten zur Automatisierung bestimmter Aufgaben verwendet werden:

  1. Erstellen von Berichten zur Zugehörigkeit zu AD-Benutzergruppen
  2. Suchen von deaktivierten oder inaktiven Benutzern in Active Directory
  3. Suchen von inaktiven Computern in Active Directory
  4. Anzeigen einer Liste abgelaufener Benutzerkonten in AD
  5. Suchen von gesperrten Benutzerkonten in Active Directory
  6. Anzeigen einer Liste aller Benutzerkonten auf einem Windows-System
  7. Überwachen von Ereignisprotokollen mit PowerShell
  8. Einrichten einer Benachrichtigung über Änderungen an der lokalen Administratorgruppe mit PowerShell
  9. Einrichten einer Benachrichtigung über abgelaufene Kennwörter in Active Directory mit PowerShell
  10. Abfragen von Ereignisprotokollen mit PowerShell
  11. Weiterleiten von Windows-Ereignisprotokollen in Windows Server 2008
  12. Tastaturkürzel für Systemadministratoren
  13. Ermitteln neuer Benutzer in Active Directory mit PowerShell
  14. Office 365: Konfigurieren niemals ablaufender Kennwörter
  15. Suchen von inaktiven Computern in Active Directory mit PowerShell
  16. Windows PowerShell und die Eingabeaufforderung (cmd) im Vergleich
  17. Verwalten von Dateisystem-ACLs mit PowerShell
  18. Dateiverwaltung mit PowerShell
  19. Erstellen neuer Active Directory-Benutzer mit PowerShell
  20. Hinzufügen und Entfernen von AD-Gruppen und -Gruppenobjekten mit PowerShell
  21. Verwalten von Organisationseinheiten und Verschieben ihrer Objekte mit PowerShell
  22. Automatisieren von PowerShell-Skripts mit dem Taskplaner
  23. Erstellen, Löschen, Umbenennen, Deaktivieren und Verbinden von Computern in AD mit PowerShell

Für die ersten Schritte mit PowerShell empfehle ich außerdem folgende Ressourcen:

Tutorial zur Skripterstellung  mit Windows PowerShell für Einsteiger