Zu diesem Buch – sowie zu vielen weiteren O’Reilly-Büchern – können Sie auch das entsprechende E-Book im PDF-Format herunterladen. Werden Sie dazu einfach Mitglied bei oreilly.plus+:

www.oreilly.plus

Dr. Tobias Weltner

PowerShell 7 und
Windows PowerShell

Das komplette Praxiswissen für Administratoren und IT-Profis

Dr. Tobias Weltner

Lektorat: Ariane Hesse

Umschlaggestaltung: Michael Oreal, www.oreal.de, unter Verwendung eines Fotos von iStock by Getty Images von querbeet, Stock-Fotografie-ID184997148

Bibliografische Information der Deutschen Nationalbibliothek

ISBN:

1. Auflage 2021

Dieses Buch erscheint in Kooperation mit O’Reilly Media, Inc. unter dem Imprint »O’REILLY«. O’REILLY ist ein Markenzeichen und eine eingetragene Marke von O’Reilly Media, Inc. und wird mit Einwilligung des Eigentümers verwendet.

Hinweis:
Dieses Buch wurde auf PEFC-zertifiziertem Papier aus nachhaltiger Waldwirtschaft gedruckt. Der Umwelt zuliebe verzichten wir zusätzlich auf die Einschweißfolie.

Schreiben Sie uns:
Falls Sie Anregungen, Wünsche und Kommentare haben, lassen Sie es uns wissen: kommentar@oreilly.de.

Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.

Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.

Alle Angaben und Programme in diesem Buch wurden mit größter Sorgfalt kontrolliert. Weder Autor noch Verlag können jedoch für Schäden haftbar gemacht werden, die in Zusammenhang mit der Verwendung dieses Buches stehen.

5 4 3 2 1 0

Inhalt

Vorwort

Wie Sie dieses Buch nutzen

Achtung

Noch mehr Unterstützung

1PowerShell: Erste Schritte

PowerShell installieren

Windows-Betriebssystem

PowerShell nachrüsten: macOS und Linux

Kompatibilität der PowerShell

PowerShell einrichten

Vorsicht mit Administratorrechten!

Interaktive Befehle eingeben

Autovervollständigung: Tippfehler vermeiden

Befehlszeilen erneut verwenden

Groß- und Kleinschreibung

Unvollständige und mehrzeilige Eingaben

PowerShell-Hilfe aus dem Internet nachladen

Skriptausführung erlauben

Weitere PowerShell-Einschränkungen

Wichtige PowerShell-Werkzeuge

PowerShell-ISE-Editor

VSCode (Visual Studio Code)

Windows-Terminal

Codebeispiele automatisch herunterladen

Befehl zum Herunterladen von Codebeispielen nachrüsten

Beispielcode in Zwischenablage kopieren

Beispielcode sofort ausführen

Profilskripte: PowerShell dauerhaft anpassen

Einzelne Profilskripte verwenden

Fragen stellen

Alle Skripte herunterladen

Zusammenfassung

Ausführungsrichtlinie festlegen

Hilfe nachrüsten

Windows PowerShell aktualisieren

Hilfsbefehle zum Download von Beispielcode

»Fehlende Befehle« verstehen

Zusätzliche Werkzeuge

2Überblick: Was PowerShell leistet

Befehle lösen Aufgaben

Literale

Text

Zahlen

Datum und Zeit

Kommentare

Cmdlets: die PowerShell-Befehle

Nach Tätigkeitsbereich suchen (»Noun«)

Nach Tätigkeit suchen (»Verb«)

Nach Herkunft suchen

Standardisierte Verben

Cmdlets per Fenster suchen

Syntax verstehen

Ausführliche Hilfe und Beispiele

Anwendungsprogramme (Applications)

Applications starten

Applications finden

Systembefehle nutzen

Hilfe für Applications abrufen

.NET-Methoden

Methoden verwenden

Hilfe für Methoden

Noch mehr Methoden

Methoden: vielseitiger, aber kleinteiliger

Operatoren

Operatoren nachschlagen

Vergleichsoperatoren

Textoperatoren

Zuweisungen und Pipeline

Zahlenreihen

Befehle verbinden

Das Türchen-Modell

Normalfall: »Türchen 3«

Modernes Pipeline-Streaming: »Türchen 1«

Klassische Variablen: »Türchen 2«

Neue Befehle nachrüsten

Beispiel 1: QR-Codes generieren

Beispiel 2: Automatische HTML-Reports

Beispiel 3: Musik spielen

Zusammenfassung

3Skripte und Funktionen

PowerShell-Skripte verstehen

Skriptcode eingeben

Skripte mit dem ISE-Editor entwickeln

Neues Skript anlegen

Skripte mit dem VSCode-Editor entwickeln

Neue Skripte anlegen

Skripte ausführen

Skripte innerhalb von PowerShell starten

Skripte außerhalb von PowerShell starten

Skripte automatisch starten

Skriptstart durch Task Scheduler

Profilskripte – die Autostartskripte

Profilskript anlegen und öffnen

Typische Profilskriptaufgaben durchführen

Neue Befehle: Funktionen

Schritt 1: Nützlicher Code

Schritt 2: Als Funktion verpacken

Schritt 3: Parameter definieren

Schritt 4: Funktionen dauerhaft verfügbar machen

Funktionen im Modul permanent verfügbar

Die gemeinsame Grundlage: der Skriptblock

Skripte sind gespeicherte Skriptblöcke

Funktionen sind vorgeladene Skriptblöcke

Module laden Funktionen bei Bedarf in den Speicher

Skript oder Funktion?

4Cmdlets – PowerShell-Befehle

Parameter steuern Cmdlets

Argumente an Parameter übergeben

Parameter machen Cmdlets vielseitig

Politisch inkorrekt: positionale Argumente

Gratiszugabe: »Common Parameters«

Auf Fehler reagieren

Vielseitigkeit durch Parametersätze

»Schmal, aber tief« – Cmdlets sind Spezialisten

Mehrere Parametersätze: noch mehr Vielseitigkeit

Praxis: Ereignisse aus dem Ereignislogbuch lesen

»ISA/HASA« – wie Cmdlets in der Pipeline funktionieren

Das »ISA/HASA«-Prinzip

Praxisnutzen

Vorteile des Pipeline-Streamings

5Die PowerShell-Pipeline

Aufbau der PowerShell-Pipeline

Befehle reichen Ergebnisse weiter

Pipeline steuert Befehle

Prinzipieller Aufbau der Pipeline

Die sechs wichtigsten Pipeline-Befehle

Select-Object

Detailinformationen festlegen

Unsichtbare Eigenschaften sichtbar machen

Eine bestimmte Eigenschaft auswählen: -ExpandProperty

Selbst festlegen, welche Informationen wichtig sind

Weitere Informationen anfügen

-First, -Last und -Skip

Berechnete Eigenschaften

Where-Object

Clientseitiger Universalfilter

Leere Elemente aussortieren

Fortgeschrittene Syntax bietet mehr Möglichkeiten

Out-GridView: das »menschliche« Where-Object

Sort-Object

Cmdlet-Ergebnisse sortieren

Sortierung mit anderen Cmdlets kombinieren

Datentyp der Sortierung ändern

Mehrere Spalten in umgekehrter Sortierung

Group-Object

Häufigkeiten feststellen

Daten gruppieren

Berechnete Gruppierungskriterien

Measure-Object

Statistische Berechnungen

Ordnergrößen berechnen

Foreach-Object

Grundprinzip: eine Schleife

Format-Cmdlets

Gefährlich: Format-Cmdlets verändern Objekte

Mehrspaltige Anzeigen

Tabellenausgabe mit Gruppierung

6Arrays und Hashtables

Arrays verwenden

Auf Array-Elemente zugreifen

Eigene Arrays (und einige Fallen)

Automatische Array-Erzeugung

Manuelle Array-Erzeugung

Hashtables – »sprechende Arrays«

Hashtables in Objekte umwandeln

Neue Objekte mit Eigenschaften initialisieren

7PowerShell-Laufwerke

Dateisystemaufgaben meistern

Cmdlets für das Dateisystem finden

Erste Schritte

Ordner anlegen

Dateien anlegen und Informationen speichern

Encoding von Textdateien

Encodings sichtbar machen

Dateien finden

Dateien und Ordner kopieren

Dateien umbenennen

Dateien und Ordner löschen

Größe eines Laufwerks ermitteln

Größe eines Ordners ermitteln

Umgebungsvariablen

Alle Umgebungsvariablen auflisten

Auf einzelne Umgebungsvariablen zugreifen

Umgebungsvariablen ändern

Windows-Registrierungsdatenbank

Schlüssel suchen

Werte lesen

Neue Registry-Schlüssel anlegen

Registry-Schlüssel löschen

Werte hinzufügen, ändern und löschen

Virtuelle Laufwerke und Provider

Neue PowerShell-Laufwerke

Ohne Laufwerksbuchstaben direkt auf Provider zugreifen

-Path oder -LiteralPath?

Existenz eines Pfads prüfen

Pfadnamen auflösen

8Operatoren und Bedingungen

Operatoren – Aufbau und Namensgebung

Wie Operatornamen aufgebaut sind

Unäre Operatoren

Zuweisungsoperatoren

Vergleichsoperatoren

Ternary-Operator

Unterscheidung zwischen Groß- und Kleinschreibung

Unterschiedliche Datentypen vergleichen

Vergleiche umkehren

Vergleiche kombinieren

Vergleiche auf Arrays anwenden

Bedingungen

if-Bedingung

switch-Bedingung

Where-Object

Null-Koaleszenz-Operatoren

Pipeline-Verkettungsoperatoren

9Textoperationen und reguläre Ausdrücke

Texte zusammenfügen

Doppelte Anführungszeichen lösen Variablen auf

Der Formatierungsoperator -f

Array-Elemente in Text umwandeln

Textstellen finden und extrahieren

Texte splitten

Informationen in Texten finden

Reguläre Ausdrücke: Textmustererkennung

Erste Schritte: Textmuster basteln

Eigene reguläre Ausdrücke konzipieren

Textstellen ersetzen

Einfache Ersetzungen

Sichere Ersetzungen mit -replace

Mehrere Zeichen durch eins ersetzen

Split und Join: eine mächtige Strategie

Dateipfade ändern

X500-Pfade auslesen

10Anwendungen und Konsolenbefehle

Programme starten

Optionen für den Programmstart festlegen

Argumente an Anwendungen übergeben

Hilfe für Konsolenbefehle anzeigen

Beispiel: Lizenzstatus von Windows überprüfen

Ergebnisse von Anwendungen weiterverarbeiten

Error Level auswerten

Fragen an Benutzer stellen mit choice.exe

Rückgabetext auswerten

Laufende Programme steuern

Feststellen, ob ein Prozess läuft

Auf einen Prozess warten

Einstellungen laufender Prozesse ändern

Prozesse vorzeitig abbrechen

11Typen verwenden

Typumwandlungen

Geeignete Datentypen auswählen

Explizite Umwandlung

Deutsches Datumsformat mit dem Operator -as

Verkettete Umwandlungen

Typen: optimale Informationsbehälter

Implizite Umwandlung

Typisierte Variablen

Parameter und Argumente

Vergleichsoperationen

Statische Methoden eines Typs verwenden

Dateiextension ermitteln

Mathematische Funktionen

Zahlenformate konvertieren

DNS-Auflösung

Umgebungsvariablen

Pfade zu Systemordnern finden

Konsoleneinstellungen

Spezielle Datumsformate lesen

Statische Eigenschaften verwenden

Neue .NET-Typen finden

Type Accelerators untersuchen

Typen nachladen

Assembly-Namen feststellen

Aktuell geladene Assemblies auflisten

Zusätzliche Assembly nachladen

Assembly aus Datei nachladen

12Mit Objekten arbeiten

Objekte kennenlernen

Objekte funktionieren wie beschriftete Schubladen

Typisierte Variablen

Objekteigenschaften erforschen

Eigenschaften lesen

Eigenschaften ändern

Methoden verwenden

Zusammenfassende Systematik

Eigenschaften

Methoden

Hilfe finden

Neue Objekte herstellen

Konstruktoren verstehen

Ein Credential-Object zur automatischen Anmeldung

Eigene Objekte erstellen

13Eigene Typen und Attribute

Typen (Klassen) selbst herstellen

Einen eigenen Typ erfinden

Neue Objekte eines Typs generieren

Konstruktoren hinzufügen

Methoden zum Typ hinzufügen

Vererbung von Typen

Konstruktoren werden nicht geerbt

Philips Hue Smart Home mit Typen steuern

Kontakt zur Philips Hue Bridge herstellen

Lampen- und Schalterinventar

Lampen und Steckdosen ansprechen

Attribute erstellen

SecureString-Transformationsattribute

Auf API-Funktionen zugreifen

API-Funktion einsetzen

Wiederverwertbare PowerShell-Funktion herstellen

14Parameter für Fortgeschrittene

Argumentvervollständigung

Statische Autovervollständigung

Autovervollständigung über Enumerationsdatentyp

Eigene Enumerationsdatentypen erstellen

Autovervollständigung über ValidateSet

Dynamische Argumentvervollständigung

Zuweisungen mit Validierern überprüfen

ValidateSet

ValidateRange

ValidateLength

ValidatePattern

ValidateCount

ValidateScript

Nullwerte und andere Validierer

Parameter in ParameterSets einteilen

Gegenseitig ausschließende Parameter

Binding über Datentyp

Parameter in mehreren Parametersätzen

Simulationsmodus (-WhatIf) und Sicherheitsabfrage (-Confirm)

Festlegen, welche Codeteile übersprungen werden sollen

Weiterleitung verhindern

Gefährlichkeit einer Funktion festlegen

Dynamische Parameter

Dynamische Parameter selbst definieren

Splatting: Argumente an Parameter binden

Splatting im Alltag einsetzen

Übergebene Parameter als Hashtable empfangen

Mit Splatting Parameter weiterreichen

15Pipeline-fähige Funktionen

Anonyme Pipeline-Funktion

Prototyping

Pipeline-fähige Funktion erstellen

Benannte Parameter

Where-Object durch eine Funktion ersetzen

Kurzes Resümee

Parameter und Pipeline-Kontrakt

ISA-Kontrakt: Pipeline-Eingaben direkt binden

HASA-Kontrakt: Objekteigenschaften lesen

HASA und ISA kombinieren

CSV-Dateien direkt an Funktionen übergeben

Aliasnamen für Parameter

16PowerShellGet und Module

PowerShellGet – die PowerShell-Softwareverteilung

Grundlage »PackageManagement«

PowerShellGet – Softwareverteilung per Cmdlets

Wo PowerShell Module lagert

Unterschiede zwischen Windows PowerShell und PowerShell

Installierte Module untersuchen

Module mit PowerShellGet nachinstallieren

Module finden und installieren

Modul herunterladen

Modul testweise ausführen

Modul dauerhaft installieren

Module aktualisieren

Side-by-Side-Versionierung

Eigene Module veröffentlichen

Eigene Module herstellen

Neue Manifestdatei anlegen

Neue Moduldatei anlegen

Modul testen

Nächste Schritte

Eigene Module verteilen

Netzwerkfreigabe

Modul in Repository übertragen

Modul aus privatem Repository installieren

17Fehlerhandling

Fehlermeldungen unterdrücken

Bestimmen, wie Cmdlets auf Fehler reagieren

Fehler mitprotokollieren lassen

Erfolg eines Befehlsaufrufs prüfen

Fehlerhandler einsetzen

Lokaler Fehlerhandler: try…catch

Globaler Fehlerhandler: Trap

18Windows PowerShell-Remoting

PowerShell-Remoting aktivieren

Zugriff auch auf Windows-Clients

Remoting-Verbindung überprüfen

NTLM-Authentifizierung erlauben

PowerShell-Remoting überprüfen

Erste Schritte mit PowerShell-Remoting

Befehle und Skripte remote ausführen

Kontrolle: Wer besucht »meinen« Computer?

Remotefähigen Code entwickeln

Argumente an Remote-Code übergeben

Ergebnisse vom Remote-Code an den Aufrufer übertragen

Fan-Out: integrierte Parallelverarbeitung

ThrottleLimit: Parallelverarbeitung begrenzen

Double-Hop und CredSSP: Anmeldeinfos weiterreichen

Eigene Sitzungen verwenden

Eigene Sitzungen anlegen

Parallelverarbeitung mit PSSessions

SSH-basiertes Remoting

SSH-Remoting aktivieren

Enter-PSSession über SSH

Invoke-Command über SSH

Unbeaufsichtigte Ausführung und Parallelbearbeitung

19Grafische Oberflächen gestalten

Eigene Fenster herstellen

GUI mit Code definieren

GUI mit XAML definieren

Beispiel: Dienststopper-Anwendung

Index

Vorwort

PowerShell begann vor 15 Jahren als Windows Powershell. Heute ist diese Shell plattformübergreifend auf Windows, Linux und macOS verfügbar und wird begeistert von einer immer größeren Anwendercommunity genutzt.

In diesem Buch werden Sie Schritt für Schritt erfahren, was PowerShell eigentlich ist und was diese Shell alles für Sie tun kann. Ob Sie Administrator »on-premise« sind und lokale Server betreuen, Ihr Unternehmen in der Cloud verwalten oder ob Sie heterogene Umgebungen »unter einen Hut« bringen wollen – PowerShell bietet die Werkzeuge dafür.

Aber auch zu Hause und in der Schule lässt es sich hervorragend einsetzen: PowerShell ist es nämlich egal, ob Sie damit eine Unternehmens-IT administrieren, Ihre Philips-Hue-Homeautomation verwalten oder Sonnenkollektoren steuern. Ob Sie den eigenen NAS-Server auf dem Dachboden sichern, automatisiert Dateien aus dem Internet laden oder vielleicht bloß Matherätsel knacken wollen.

Und genau deshalb ist PowerShell auch in Ausbildung und Schulen spannend: Kaum eine andere kostenlose Programmierumgebung und Shell unterstützt so viele Programmierkonzepte auf so vielen Plattformen – angefangen von Befehlsaufrufen über moderne Programmiertechniken wie den Einsatz von Funktionen und Objekten bis hin zu nativer Klassenunterstützung, Vererbung und universellem Netzwerk-Remoting. Kaum eine andere Umgebung bietet so unmittelbares Feedback wie PowerShell. Ideal also, um im Unterricht und in der Ausbildung anhand von nachvollziehbaren Praxisbeispielen die Funktionsweisen moderner IT auszuprobieren und zu vertiefen.

Dieses Buch bietet zahlreiche Praxisbeispiele aus den unterschiedlichsten Einsatzbereichen und demonstriert schrittweise die vielfältigen Möglichkeiten der PowerShell.

So schlüpfen Sie zu Anfang des Buches in die Rolle des einfachen PowerShell-Anwenders. Sie generieren mit Einzeilern Excel- und HTML-Reports und können mit wenigen Schritten Cloud-Systeme steuern oder Notenblätter aus dem Internet herunterladen und als PDF exportieren.

Von diesen ersten Fingerübungen inspiriert lernen Sie den Minimal-Wortschatz der PowerShell kennen und fügen mehrere Befehle zu eigenen größeren Automationslösungen zusammen.

Die Anwendungsbeispiele werden immer komplexer, und Sie lernen schrittweise alle weiteren wichtigen Konzepte der PowerShell kennen. Dazu gehören Remotezugriffe, direkte Betriebssystemaufrufe, das Erstellen grafischer Oberflächen sowie eigene PowerShell-Befehle und -Module.

Am Ende dieses Buches beherrschen Sie dann eine der modernsten Automationssprachen, die für Windows, Linux und macOS kostenfrei zur Verfügung stehen, und haben sich privat wie beruflich vom einfachen Anwender zum versierten IT-Automatisierer qualifiziert.

Damit Sie auf dieser Reise nicht allzuviel eintippen müssen, automatisiert PowerShell in diesem Buch auf Wunsch natürlich auch das Eintippen der Beispiele für Sie. Schon im ersten Kapitel lernen Sie den passenden Befehl kennen: durch Eingabe der jeweiligen Listingnummer fügt PowerShell den Quellcode aus dem Buch automatisch ein.

Wie Sie dieses Buch nutzen

Dieses Buch setzt keinerlei Grundkenntnisse voraus, wenn Sie von vorn zu lesen beginnen – und das ist auch empfehlenswert. Die Kapitel bauen aufeinander auf. Am Anfang jedes Kapitels finden Sie eine kurze Zusammenfassung, falls es einmal eilig ist.

Die PowerShell-Beispiele im Buch sind jeweils in einer anderen Schriftart formatiert. Damit Sie leichter erkennen, welche Eingaben von Ihnen erwartet werden, wird bei allen Eingaben die PowerShell-Eingabeaufforderung PS> (einschließlich der Leerstelle hinter dem >) vorangestellt. Diese Eingabeaufforderung kann bei Ihnen auch anders aussehen und sollte in den Beispielen natürlich nicht mit eingegeben werden.

Achtung

Bitte verwenden Sie die Begleitmaterialien immer im Kontext des entsprechenden Buchkapitels. Viele der Beispiele funktionieren nur, wenn Sie die entsprechenden Vorarbeiten im Kapitel beachtet haben, oder können auch unerwartete Resultate liefern, wenn man die Beispiele aus dem Zusammenhang des Kapitels reißt.

Noch mehr Unterstützung

Falls trotz aller Sorgfalt einmal Fragen offenbleiben oder Sie weitere Ideen und Themenwünsche haben, besuchen Sie einfach das interaktive Leserforum zu diesem Buch: https://github.com/TobiasPSP/OReilly/discussions

Damit bleibt mir an dieser Stelle nur noch, Ihnen viel Spaß zu wünschen bei der Lektüre dieses Buchs und bei der Arbeit mit der faszinierenden PowerShell! Ich würde mich freuen, von Ihnen im Diskussionsforum zu hören.

Herzlichst,

Tobias Weltner

Kapitel 1

PowerShell: Erste Schritte

In diesem Kapitel:

PowerShell installieren

PowerShell einrichten

Wichtige PowerShell-Werkzeuge

Codebeispiele automatisch herunterladen

Profilskripte: PowerShell dauerhaft anpassen

Zusammenfassung

Ausführlich werden in diesem Kapitel die folgenden Aspekte erläutert:

Achtung

Wenn Sie es eilig haben und die Grundlagen der PowerShell schon kennen, dürfen Sie diesen Einleitungsteil selbstverständlich überspringen. Sie sollten aber in jedem Fall wenigstens den Abschnitt »Zusammenfassung« am Ende dieses Kapitels beachten. Dort werden wichtige Grundeinstellungen besprochen, die die Voraussetzung für viele Beispiele in den folgenden Kapiteln sind.

PowerShell ist eine verblüffend flexible und machtvolle plattformunabhängige Automationssprache, die mit geringem Aufwand ein enormes Spektrum von Aufgaben automatisieren kann.

Dazu zählen typische IT-Administrationsaufgaben ebenso wie völlig andere Einsatzbereiche aus Mathematik, Forschung und Lehre, in der Büroautomation und nicht zuletzt in Hobby und Tüftelei: Schon im nächsten Kapitel werden wir uns kurz der Musikkomposition und Steuerung von MIDI-Musikinstrumenten widmen, und in Kapitel 13 erfahren Sie zum Beispiel, wie PowerShell sogar Lampen und Steckdosen in Ihrem Zuhause fernsteuert. Die Grundlagen und Strategien sind dabei indes immer dieselben.

Bei all diesen Beispielen geht es also ausschließlich um zweierlei: kurzweilig und verständlich möglichst viele Einsatzszenarien der PowerShell vorzustellen, um Ideen zu wecken und eine breite Leserschicht anzusprechen, und die stets gleichen allgemeinen Mechanismen zu verstehen, die dabei zum Einsatz kommen.

Denn mit dem Wissen, das Sie beispielsweise in der Musikkomposition oder auch bei der Fernsteuerung von Elektrogeräten benötigen, können Sie natürlich auch Server aufsetzen oder Drittanbietersoftware für Backup-Lösungen steuern – und umgekehrt. Hier wird deutlich, dass PowerShell ebenfalls eine ideale Plattform für Ausbildung und Schule ist, denn alle modernen IT-Grundlagen lassen sich damit anschaulich und unterhaltsam vermitteln.

Zunächst aber muss PowerShell vollständig eingerichtet werden, und genau darum geht es in diesem ersten Kapitel. Dabei werden auch einige wichtige Sicherheitseinstellungen besprochen, und der Unterschied zwischen PowerShell und Windows PowerShell wird Ihnen schnell klar werden.

Danach folgt ein kleiner Exkurs zu den wichtigsten kostenlosen PowerShell-Tools, mit denen Sie Ihren Computer in eine moderne PowerShell-Entwicklungsumgebung verwandeln.

Zum Abschluss des Kapitels erfahren Sie, wie die vielen Hundert Skriptbeispiele in diesem Buch ohne Tipparbeit direkt von PowerShell aus dem Internet heruntergeladen und ausgeführt werden und wie offengebliebene Fragen unmittelbar an den Autor gerichtet werden können.

Hinweis

In diesem Buch wird das Wort »PowerShell« immer dann kursiv gesetzt, wenn spezifisch die neue plattformübergreifende PowerShell gemeint ist. Der nicht kursiv gesetzte Begriff »PowerShell« bezieht sich allgemein auf die Sprache PowerShell und gilt sowohl für Windows PowerShell als auch für PowerShell.

Schon in diesem Kapitel wird Ihnen bereits PowerShell-Code begegnen, der aber hier als reines »Werkzeug« für die Einrichtung Ihres Computers dient. Sie können den Code natürlich bereits neugierig mustern, aber bitte brüten Sie nicht zu lange über einzelnen Codebeispielen. Es kommt in diesem Kapitel nur auf die Ergebnisse der Codebeispiele an, nicht auf den Code selbst und seine Mechanismen. Diese stehen ab dem zweiten Kapitel im Vordergrund und werden dort dann auch systematisch besprochen.

PowerShell installieren

PowerShell ist plattformunabhängig und kann auf verschiedenen Betriebssystemen ausgeführt werden, zum Beispiel Windows, Linux oder macOS.

Historisch ist PowerShell allerdings als Teil des Windows-Betriebssystems entstanden und dort als sogenannte Windows PowerShell immer automatisch enthalten. Seit 2016 ist diese Fassung in Version 5.1 fertiggestellt, wird auf diesem Stand gehalten und weiter von Microsoft gewartet.

Alle Entwicklungsarbeit geht seit 2016 in die neue, plattformunabhängige PowerShell, bei Drucklegung dieses Buchs in Version 7.2, die bei allen Betriebssystemen zuerst nachinstalliert werden muss. Wie das geschieht, erfahren Sie jetzt, und zwar in separaten Abschnitten für die jeweiligen Betriebssysteme.

Windows-Betriebssystem

In allen Windows-Betriebssystemen ab Server 2008 und Windows 7 ist die PowerShell bereits fester Bestandteil – genauer gesagt die Windows PowerShell. Hier könnten Sie also sofort loslegen, sollten aber wenigstens prüfen, ob Ihre Windows PowerShell auf dem aktuellen Stand ist (dazu gleich mehr).

Noch empfehlenswerter ist es, zusätzlich zur integrierten Windows PowerShell auch die neue PowerShell hinzuzuinstallieren. Beide laufen friedlich parallel nebeneinander, und so können Sie sich ein eigenes Bild von den Unterschieden machen.

Immer vorhanden: Windows PowerShell

Sie starten die Windows PowerShell mit dem Befehl powershell.exe (oder kurz powershell) – wie jedes andere Programm auch. Drücken Sie zum Beispiel + , um das Dialogfeld Ausführen zu öffnen (siehe Abbildung 1.1), und geben den Befehl powershell ein. Dann klicken Sie auf OK.

In der Taskleiste erscheint ein blaues Symbol, das Sie per Rechtsklick und An Taskleiste anheften am besten dauerhaft dort anpinnen. Ein Rechtsklick auf das Symbol öffnet die sogenannte Sprungliste, sozusagen das Cockpit der Windows PowerShell (siehe Abbildung 1.2).

Abbildung 1.1: Windows PowerShell starten

Von hier aus können Sie die PowerShell zum Beispiel mit vollen Administratorrechten starten, und auch der in Windows PowerShell integrierte Editor ISE (Integrated Script Environment) steht hier bereit.

Abbildung 1.2: Sprungliste der Windows PowerShell

Die Windows PowerShell selbst erscheint als blaue oder schwarze Konsole, in die Sie Befehle eingeben können (siehe Abbildung 1.3). Auch wenn es Ihnen bereits in den Fingern juckt: Verschieben Sie Ihre Experimente bitte noch einen Moment – was Sie alles mit PowerShell tun können, veranschaulicht der Rundkurs im nächsten Kapitel.

Lassen Sie uns zunächst alles einsatzbereit machen.

Abbildung 1.3: Die in Windows integrierte Windows PowerShell

Ist Ihre Windows PowerShell noch aktuell?

Falls Sie Windows 10 oder Server 2016 (und besser) verwenden, ist alles gut: Diese Betriebssysteme enthalten Windows PowerShell in Version 5.1, der letzten und ausgereiften Version. Diese Version wird über die gesamte Laufzeit von Windows 10 weitergepflegt und automatisch aktualisiert.

Wer ein älteres Windows-Betriebssystem nutzt, muss Windows PowerShell manuell aktualisieren. Das ist sinnvoll, weil die Codebeispiele dieses Buchs die aktuelle Windows Power-Shell 5.1 voraussetzen. Es ist aber vor allem wichtig, weil Updates stets auch Programmfehler und Sicherheitslücken berichtigen. Schauen Sie also in Ihrer Windows PowerShell kurz nach, welche Version Sie verwenden (siehe Abbildung 1.4). Geben Sie ein:

PS> $PSVersionTable.PSVersion

Zurückgeliefert wird die Version der PowerShell. Bei Versionen kleiner als 5.1 (Major: 5, Minor: 1) ist es Zeit für ein Update.

Abbildung 1.4: Version der PowerShell bestimmen

Weil Windows PowerShell ein fester Teil von Windows ist, kann man sie nur über spezielle Update-Pakete aktualisieren. Diese stehen kostenlos bei Microsoft als sogenannte msu-Pakete zum Download bereit. Bei Drucklegung dieses Buchs fand man das sogenannte Windows Management Framework 5.1 hier: https://www.microsoft.com/en-us/download/details.aspx?id=54616 (siehe Abbildung 1.5).

Tipp

Links ändern sich, und sollte der genannte Link nicht mehr funktionieren, googeln Sie nach »Windows Management Framework 5.1 Download«.

Bitte beachten Sie auf der Downloadseite die Installationshinweise am Ende der Seite, insbesondere wenn Sie noch das alte Windows 7 verwenden. Windows PowerShell erfordert übrigens das .NET Framework 4.5 oder besser, das bei sehr alten Windows-Systemen gegebenenfalls vor dem Update nachinstalliert werden muss.

Bei Clients ist ein Update der Windows PowerShell schnell erledigt. Bei Servern sollten Sie sich dagegen vor dem Update unbedingt genauer informieren: Serversoftware wie Microsoft Exchange kann auf eine ganz bestimmte Windows PowerShell-Version festgelegt sein. Entweder aktualisieren Sie in so einem Fall Windows PowerShell gemeinsam mit den übrigen Serverkomponenten, die davon abhängen, oder Sie installieren, wenn Ihnen das zu heikel oder zu aufwendig ist, parallel zu Windows PowerShell kurzerhand die neue moderne PowerShell und arbeiten künftig einfach mit dieser, während Sie Windows PowerShell unverändert lassen.

Abbildung 1.5: Windows PowerShell ist Teil des Windows Management Framework.

PowerShell 7: die »neue« PowerShell

Weil Windows PowerShell in das Windows-Betriebssystem fest integriert ist, kann sie – wie Sie gerade erlebt haben – nur relativ umständlich aktualisiert werden. Erst recht steht sie nicht auf anderen Betriebssystemen zur Verfügung. Deshalb hat das Microsoft-Entwicklungsteam um Steve Lee im Jahr 2016 die Entwicklung der Windows PowerShell abgeschlossen.

Alle folgenden Versionen der PowerShell wurden fundamental anders entwickelt: Sie sind nicht mehr Bestandteil von Windows, sondern eigenständige portable Anwendungen, die fortan auf dem neuen plattformunabhängigen .NET Framework Core basieren. So kann Power-Shell nun auch auf Linux, macOS und anderen Betriebssystemen eingesetzt werden.

Die neue PowerShell heißt auch nicht länger Windows PowerShell, sondern nur noch Power-Shell, die Anwendung pwsh.exe anstelle von powershell.exe.

Darüber hinaus ist PowerShell quellcodeoffen (Open Source) und portabel. Sie kann also beliebig oft und in beliebigen Versionen parallel existieren, und wenn Sie möchten, könnten Sie sie sogar wie ein persönliches Werkzeug auf einem USB-Stick bei sich tragen und vom Stick aus starten.

So ist die neue PowerShell sogar für Windows-Anwender interessant. Installieren Sie sie parallel zur vorhandenen Windows PowerShell, können Sie wahlweise Windows PowerShell über den Befehl powershell starten oder eben PowerShell über den Befehl pwsh.

Profitipp

Das wirft in Unternehmen häufig die Frage auf, ob (und, wenn ja, wie) man unternehmensweit von Windows PowerShell auf PowerShell umsteigen sollte. Schließlich ist die Windows PowerShell ja inzwischen »veraltet« und wird nicht länger weiterentwickelt. Stimmt das?

Nein. Windows PowerShell ist keineswegs abgekündigt und wird bis ans Ende der Laufzeit von Windows 10 weiter voll von Microsoft unterstützt. Auch etwaige Sicherheitslücken, sollten sie denn auftreten, werden weiterhin behoben, und Windows PowerShell ab Version 5.1 wird über das automatische Windows Update automatisch gepflegt.

Deshalb spricht nichts dagegen, Windows PowerShell auch weiterhin einzusetzen. Windows PowerShell hat gegenüber PowerShell sogar zwei unternehmenskritische Vorteile:

  • Automatische Verfügbarkeit: Weil Windows PowerShell fester Bestandteil von Windows ist, steht sie immer automatisch zur Verfügung und wird ebenso automatisch aktualisiert. Wollen Sie stattdessen die neuere PowerShell einsetzen, müssten Sie sich eine eigene Deployment-Strategie überlegen, also PowerShell in eigener Verantwortung auf alle Computer im Unternehmen verteilen und natürlich auch zeitnah aktuell halten.
  • Vollständiges .NET Framework: Windows PowerShell basiert auf dem klassischen vollständigen .NET Framework 4.5. Dies ist eine Softwarebibliothek, aus der sich die meisten Windows-Anwendungen bedienen. Die plattformübergreifende PowerShell dagegen basiert auf dem abgespeckten .NET Framework Core, derzeit in Version 3.1. Obwohl dieses Framework rund 99 % der notwendigen Funktionen enthält, besteht doch die Möglichkeit, dass bestimmte Erweiterungen oder ältere Skripte darauf nicht lauffähig sind.

Wenn Sie also nicht unbedingt auf bestimmte neue Funktionalitäten in PowerShell angewiesen sind, spricht überhaupt nichts dagegen, im Unternehmen auch weiterhin flächendeckend Windows Power-Shell einzusetzen. Spezialisten und PowerShell-Entwickler können davon unbenommen auf ihren eigenen Entwicklungssystemen und in eigener Regie natürlich dennoch bereits die neue PowerShell einsetzen, wenn sie ihnen Vorteile bietet.

Einfache Installation über den Microsoft Store

Am einfachsten funktioniert die Installation der PowerShell über den Microsoft Store. Öffnen Sie ihn, indem Sie im Windows-Startmenü nach »Store« suchen.

Achtung

In vielen Unternehmensumfeldern ist der Zugang zum Microsoft Store abgeschaltet. Hier installieren Sie die neue PowerShell manuell (siehe unten). Besondere Administratorrechte sind für die Installation nicht notwendig.

Natürlich kann auch die Windows PowerShell den Store für Sie öffnen (denn PowerShell kann alles, was auch per Maus zu bewerkstelligen ist – sofern Sie die passenden Befehle kennen):

Start-Process shell:appsFolder\Microsoft.WindowsStore_8wekyb3d8bbwe!App

Listing 1.1: Microsoft Store mit PowerShell öffnen

Wichtig

Wenn Sie die Codebeispiele aus dem Buch nicht von Hand eingeben wollen, rüsten Sie den Befehl L mit dieser Zeile nach:

PS> Invoke-RestMethod -Uri https://tinyurl.com/codeAusBuch -UseBasicParsing | New-Item -Path

function: -Name L -Force | Out-Null

Geben Sie hinter dem Befehl die Listing-Nummer an, beispielsweise:

PS> L 1.1

Listing 1.1 liegt in der Zwischenablage. Fügen Sie es mit STRG+V in Konsole oder Editor ein.

Mehr zum Befehl L, welche sonstigen Tricks er auf Lager hat und wie Sie den Befehl dauerhaft verfügbar machen, erfahren Sie ab Seite 63.

Klicken Sie im Microsoft-Store-Fenster auf Suchen und geben Sie als Suchwort »PowerShell« ein. Klicken Sie auf PowerShell Preview und dann auf Installieren (siehe Abbildung 1.6).

Abbildung 1.6: PowerShell 7 als Preview über den Microsoft Store installieren

Hinweis

Die Preview-Fassung der PowerShell enthält jeweils die allerneuesten Funktionen und eignet sich besonders gut zum Experimentieren und Kennenlernen. Darüber hinaus steht im Store neuerdings auch die Produktionsversion ohne den Zusatz »Preview« zur Verfügung.

Falls der Store Sie übrigens um Anmeldedaten bittet oder dazu drängen will, ein Benutzerkonto anzulegen, lehnen Sie dankend ab. Eine Anmeldung ist zum Herunterladen und Installieren nicht nötig.

Nach der Installation wird die neue PowerShell über den Befehl pwsh gestartet. Drücken Sie also zum Beispiel + und geben Sie den Befehl pwsh ins Dialogfeld Ausführen ein. Dann klicken Sie auf OK.

Die neue PowerShell öffnet ein Konsolenfenster mit schwarzem Hintergrund (bei Windows PowerShell ist der Hintergrund blau). Auch das Symbol der neuen PowerShell ist schwarz und nicht blau. In der Titelleiste des Konsolenfensters lesen Sie außerdem den Pfad, unter dem die neue PowerShell installiert wurde.

Klicken Sie das Symbol der neuen PowerShell in der Taskleiste mit der rechten Maustaste an und wählen Sie An Taskleiste anheften. So bleibt es dauerhaft sichtbar, und Sie können künftig bequem per Mausklick die passende PowerShell öffnen (siehe Abbildung 1.7).

Abbildung 1.7: Windows PowerShell und PowerShell lassen sich in Windows parallel betreiben.

Tipp

Die angehefteten Symbole der Taskleiste befinden sich übrigens in einem separaten versteckten Ordner, den Sie über den folgenden Befehl öffnen können:

PS> explorer "$env:appdata\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar"

Wenn Sie die Version der neuen PowerShell durch Eingabe von $PSVersion überprüfen, offenbaren sich erste Unterschiede (siehe Abbildung 1.8):

Abbildung 1.8: Eine als »App« über den Microsoft Store installierte PowerShell 7.1

PSVersion meldet die neue Version, und PSEdition zeigt Core. Bei Windows PowerShell steht hier Desktop.