image

image

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

www.dpunkt.plus

Dr. Tobias Weltner

Windows PowerShell –
Grundlagen und Scripting-Praxis
für Einsteiger

image

Dr. Tobias Weltner

Lektorat: Ariane Hesse

Umschlaggestaltung: Michael Oreal, www.oreal.de, unter Verwendung eines Fotos von Kirillm/iStock by Getty Images

Bibliografische Information der Deutschen Nationalbibliothek

ISBN:

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.

1. Auflage 2018

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.

Die Informationen in diesem Buch wurden mit größter Sorgfalt erarbeitet. Dennoch können Fehler nicht vollständig ausgeschlossen werden. Verlag, Autoren und Übersetzer übernehmen keine juristische Verantwortung oder irgendeine Haftung für eventuell verbliebene Fehler und deren Folgen.

5 4 3 2 1 0

Inhalt

Einleitung

1PowerShell startklar machen

Mit PowerShell Kontakt aufnehmen

Die PowerShell-Konsole einrichten

PowerShell ISE einsetzen

VSCode und PowerShell

Erste Schritte mit PowerShell

IntelliSense-Unterstützung im ISE-Editor

Skriptausführung erlauben

Tippfehler vermeiden und Eingaben erleichtern

PowerShell-Hilfe aus dem Internet nachladen

Teil AErste Befehle

2Cmdlets – die PowerShell-Befehle

Alles, was Sie über Cmdlets wissen müssen

Cmdlets für eine Aufgabe finden

Mit Parametern Wünsche formulieren

Neue Cmdlets aus Modulen nachladen

Alias: Zweitname für Cmdlets

3PowerShell-Laufwerke

Dateisystemaufgaben meistern

Umgebungsvariablen

Windows-Registrierungsdatenbank

Virtuelle Laufwerke und Provider

4Anwendungen und Konsolenbefehle

Programme starten

Argumente an Anwendungen übergeben

Ergebnisse von Anwendungen weiterverarbeiten

Laufende Programme steuern

Teil BAufgaben automatisieren

5PowerShell-Skripte

PowerShell-Skripte verfassen

Profilskripte – die Autostartskripte

Skripte außerhalb von PowerShell starten

6Die PowerShell-Pipeline

Aufbau der PowerShell-Pipeline

Select-Object

Where-Object

Sort-Object

ForEach-Object

Group-Object

Measure-Object

Mit »berechneten« Eigenschaften arbeiten

Teil COperatoren nutzen

7Operatoren und Bedingungen

Operatoren – Aufbau und Namensgebung

Zuweisungsoperatoren

Vergleichsoperatoren

Bedingungen

8Textoperationen und reguläre Ausdrücke

Texte zusammenfügen

Textstellen finden und extrahieren

Reguläre Ausdrücke: Textmustererkennung

Textstellen ersetzen

Split und Join: eine mächtige Strategie

Teil DBetriebssystem-Funktionen einsetzen

9Mit Objekten arbeiten

Eigenschaften und Methoden

Eigenschaften und Methoden anzeigen

Ergebnisse eines Befehls untersuchen

Eigenschaften lesen

Eigenschaften ändern

Methoden aufrufen

10Typen verwenden

Typumwandlungen

Neue Objekte durch Typumwandlungen

Implizite Umwandlung und typisierte Variablen

Verborgene Befehle in Typen

Statische Methoden verwenden

Neue Objekte herstellen

COM-Objekte verwenden

Webdienste ansprechen

Typen nachladen

Teil ENeue eigene Befehle erfinden

11Powershell-Funktionen

Alles Wichtige: ein Überblick

Eine bessere Prompt-Funktion

Zwingend erforderliche Parameter

Argumente ohne Parameter

Rückgabewerte festlegen

12Pipeline-fähige Funktionen

Anonyme Pipeline-Funktion

Parameter und Pipeline-Kontrakt

»HASA«-Kontrakt: Objekteigenschaften lesen

Modularer Code mit Pipeline-fähigen Funktionen

13Eigene Module erstellen

Module sind Ordner

Manifestdatei für ein Modul

14PowerShellGet – Module verteilen und nachladen

PowerShell Gallery nutzen

Privates Repository einrichten

Teil FFehlerbehandlung und Debugging

15Fehlerhandling

Fehlermeldungen unterdrücken

Fehlerhandler einsetzen

Teil GMit Remoting quer durchs Netzwerk

16Fernzugriff und Netzwerk-Troubleshooting

Klassische Fernzugriffe

Troubleshooting für Fernzugriffe

17Windows PowerShell-Remoting

PowerShell-Remoting aktivieren

Erste Schritte mit PowerShell-Remoting

Remotefähigen Code entwickeln

Index

Über den Autor

Einleitung

PowerShell ist als Automationssprache entwickelt worden: IT-Administratoren und ambitionierte Computeranwender können damit Routineaufgaben automatisch erledigen. Das spart Zeit und lästige Handgriffe und ist aus der modernen IT nicht mehr wegzudenken.

Darüber hinaus ist PowerShell inzwischen aber auch eine sehr effektive Programmiersprache geworden, mit der man ohne komplexes Vorwissen und in nur wenigen Zeilen Code kleine Programme und Tools schreiben kann. Das ist für nahezu jeden ambitionierten Computeranwender interessant, nicht mehr lediglich für IT-Profis.

Und spätestens mit PowerShell 6 laufen PowerShell-Skripte nun sogar nicht mehr nur auf Windows, sondern auch auf Linux und MacOS. Das macht PowerShell-Fachwissen noch erheblich vielseitiger.

Dieses Buch beginnt bei null und führt Sie Schritt für Schritt in alle wichtigen Grundlagen der PowerShell ein. Ob Sie PowerShell beruflich nutzen oder privat, quer über das Netzwerk auf Hunderten von Computern Programme konfigurieren oder bloß auf dem eigenen Notebook Urlaubsbilder umbenennen wollen: Dieses Buch liefert zahlreiche Praxisbeispiele und erklärt die eingesetzten Techniken so, dass Sie die Beispiele leicht an eigene Bedürfnisse anpassen können.

Sieben didaktisch aufeinander aufbauende Teile führen Sie ohne notwendiges Vorwissen in die Möglichkeiten der PowerShell ein.

Im ersten Kapitel erfahren Sie, wie PowerShell auf dem Computer eingerichtet wird und welche essenziellen Einstellungen und ersten Schritte wichtig sind, um PowerShell-Befehle ausführen zu können.

In Teil A wird die PowerShell als praktische interaktive Konsole betrachtet – schnelle Ergebnisse mit ganz wenigen Eingaben. Sie entdecken, welche Befehle die PowerShell versteht, wie man schnell die benötigten Befehle findet und neue Befehle nachrüsten kann. In diesem Teil wird auch das universelle Laufwerkkonzept der PowerShell vorgestellt, mit dem beinahe alles – vom Dateisystem über Zertifikate und Registrierung bis hin zu Datenbanken und Benutzerverwaltung – als Laufwerk gesehen werden kann, auf dem man Informationen findet.

Teil B zeigt dann, wie aus mehreren Einzelbefehlen und der PowerShell-Pipeline komplexere und mächtigere Automationsskripte entstehen, mit denen sich vielfältige Aufgaben vollständig automatisieren lassen.

Teil C beschäftigt sich mit Operatoren, die oft unterschätzt werden. Hier erfahren Sie, wie man intelligente Entscheidungen (Bedingungen) formuliert. Einen besonderen Schwerpunkt bilden die Textoperatoren und sogenannten »regulären Ausdrücke«, mit denen PowerShell die für Sie wichtigen Informationen aus Texten, Logdateien und von Webseiten fischen kann.

PowerShell kommt bereits mit Hunderten eigener Befehle, doch bietet es vor allem eine Schnittstelle zu den unzähligen Betriebssystemfunktionalitäten, die im .NET Framework bereitgestellt werden. In Teil D erfahren Sie, wie PowerShell auf all diese Funktionen zugreifen kann. So erhalten Ihre PowerShell-Skripte Zugriff auf genau die gleichen Möglichkeiten, die auch Anwendungsentwicklern anderer .NET-Sprachen zur Verfügung stehen, und können von DNS-Auflösung über Sprachausgabe bis hin zu eigenen Fenstern und Oberflächen alles nachrüsten, was noch nicht über vorgefertigte PowerShell-Cmdlets erreichbar war.

Weil PowerShell eine dynamische Sprache ist, kann man den Befehlssatz sehr leicht erweitern. Teil E erklärt zuerst, wie Ihr PowerShell-Code zu einem PowerShell-Befehl wird, der dann in allen PowerShells zur Verfügung steht. Danach erfahren Sie, wie PowerShell-Module erzeugt werden: Mit ihnen lassen sich Befehlssammlungen an Kollegen und Kunden weitergeben. Und schließlich wird das brandneue PowerShellGet vorgestellt, über das Module automatisiert verteilt werden können.

Wenn PowerShell dabei einmal nicht genau das tut, was Sie sich vorstellen, hilft Teil F und zeigt, wie Fehler im Code erkannt und »behandelt« werden können. Dazu zählt auch das Mitprotokollieren von Fehlern und ungewöhnlichen Zuständen.

In Teil G wird zum Abschluss das »PowerShell Remoting« vorgestellt. Mit diesem extrem mächtigen Feature kann PowerShell-Code remote auf einem oder vielen anderen Computern parallel ausgeführt werden. Weil PowerShell inzwischen auch auf Linux und MacOS ausführbar ist, kann man darüber unter anderem auch Informationen in heterogenen Welten austauschen.

Dieses Buch ist eine überarbeitete und gekürzte Fassung des über 1.100 Seiten starken »Windows PowerShell 5: Windows Automation für Einsteiger & Profis«, das sich auf die für Einsteiger wichtigen Inhalte fokussiert.

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 bei der Arbeit mit diesem Buch Fragen auftauchen oder Sie Anregungen haben, besuchen Sie mich: http://www.powertheshell.com. Oder senden Sie mir eine Nachricht an meine Mail-adresse tobias.weltner@email.de.

Bevor ich Ihnen viel Spaß und Erfolg mit PowerShell wünsche, geht noch ein großes Dankeschön an meine Lektorin Ariane Hesse und die Korrektorin Sibylle Feldmann, die dieses Buch mit allergrößtem Sachverstand und mit Sorgfalt begleitet haben.

Herzlichst Ihr

Dr. Tobias Weltner

Kapitel 1

PowerShell startklar machen

In diesem Kapitel:

Mit PowerShell Kontakt aufnehmen

Die PowerShell-Konsole einrichten

PowerShell ISE einsetzen

VSCode und PowerShell

Erste Schritte mit PowerShell

IntelliSense-Unterstützung im ISE-Editor

Skriptausführung erlauben

Tippfehler vermeiden und Eingaben erleichtern

PowerShell-Hilfe aus dem Internet nachladen

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

 

Mit PowerShell Kontakt aufnehmen

PowerShell ist eigentlich unsichtbar, denn es ist eine Automationssprache, die seit 2009 fest in das Windows-Betriebssystem eingebettet ist. Um mit ihr Kontakt aufzunehmen, wird ein Programm benötigt, das Ihre Befehle und Anweisungen an die PowerShell schicken kann und von dort die Ergebnisse zurückerhält.

Solche Programme werden »Host« genannt (engl. für »Gastgeber«). Windows enthält zwei solcher Host:

Beide Hosts kommunizieren mit derselben unsichtbaren PowerShell, sprechen also genau dieselbe Sprache und verstehen dieselben Befehle. Sie unterscheiden sich nur in der Bedienerfreundlichkeit.

PowerShell 6 auf Linux und MacOS

Wenn Sie kein Windows-Betriebssystem verwenden, sondern Linux oder MacOS, steht dort seit Neuestem ebenfalls die PowerShell zur Verfügung: PowerShell 6 (auch »PowerShell Core« genannt) ist ein Microsoft-Open-Source-Projekt, das hier kostenfrei heruntergeladen werden kann: https://github.com/PowerShell/PowerShell/releases. Scrollen Sie auf der Seite abwärts, bis Sie den Bereich der Downloads sehen. Pro Betriebssystem werden unterschiedliche Downloads angeboten.

Das PowerShell-6-Installationspaket enthält sowohl die unsichtbare PowerShell-Sprache als auch einen Host namens pwsh.exe. Ein komfortables Entwicklungssystem wie die ISE gibt es hier nicht.

PowerShell 6 ist eine portable Anwendung und kann auch auf Windows-Systemen parallel zur fest in Windows integrierten PowerShell genutzt werden.

Allerdings erkauft sich PowerShell 6 die Plattformunabhängigkeit mit deutlich eingeschränkter Funktionalität: PowerShell 6 basiert nämlich nicht auf dem vollen Umfang der Windows-Programmierschnittstellen (.NET), sondern auf einer portablen Minifassung (.NET Core). Obwohl es also möglich ist, PowerShell 6 auch auf Windows einzusetzen, ist das derzeit wenig sinnvoll.

Die in Windows integrierte PowerShell leistet wesentlich mehr. Aufgrund der PowerShell-6-Einschränkungen kann man darin zum Beispiel keine grafischen Benutzeroberflächen anzeigen, die die bei Windows üblichen Techniken »Forms« oder »WPF« nutzen. Deshalb fehlen in PowerShell 6 alle Befehle, die Ergebnisse auf solche Weise anzeigen. Und wegen der übrigen eingeschränkten Programmierschnittstellen lassen sich auch viele andere wichtige Windows-Technologien wie Active Directory, Microsoft Office oder Exchange nicht automatisieren.

PowerShell 6 ist nur der erste Versuch von Microsoft, die Grenzen des eigenen Betriebssystems zu sprengen, und der derzeit eingeschränkte Funktionsumfang wird künftig sicher wachsen. Einstweilen bietet Ihnen die plattformunabhängige PowerShell 6 aber die Möglichkeit, auch auf Nicht-Windows-Systemen erste Erfahrungen mit PowerShell zu sammeln und heterogene Umgebungen einheitlich zu verwalten.

In Teil G erfahren Sie mehr dazu, wie PowerShell auch remote auf anderen Computern ausgeführt werden kann. So könnte ein Skript, das in einer Windows-PowerShell läuft, per »Remoting« Kontakt zu einem PowerShell 6 auf einem Linux-System aufnehmen und dort Einstellungen vornehmen.

In diesem Buch werden alle wesentlichen Funktionen von Windows PowerShell beschrieben. Viele Grundtechniken funktionieren unverändert auch in PowerShell 6, aber Sie wissen nun, warum einige Befehle dort nicht vorhanden sind oder nicht richtig funktionieren.

Weitere PowerShell-Hosts

Neben der mitgelieferten Konsole und dem ISE-Entwicklungssystem gibt es unzählige weitere PowerShell-Hosts, kommerzielle wie frei verfügbare.

Microsoft bietet zum Beispiel mit »VSCode« (Visual Studio Code) einen kostenlosen Texteditor, für den es ein ebenfalls kostenfreies Plug-in namens »PowerShell Editor Services« gibt. Damit wird auch aus VSCode eine leistungsfähige und hochmoderne PowerShell-Entwicklungsumgebung. Sie richtet sich allerdings eher an erfahrenere Anwender, weil sie über unzählige Tastenkombinationen bedient wird und wenig anklickbare Funktionen bietet.

VSCode ist ähnlich wie PowerShell 6 plattformunabhängig und ist deshalb besonders auf Nicht-Windows-Betriebssystemen wichtig, auf denen es keine anderen PowerShell-Entwicklungssysteme gibt.

PowerShell und Hosts einsatzbereit machen

Damit Sie gleich bequem mit PowerShell arbeiten können, schauen wir uns im folgenden Abschnitt die verfügbaren PowerShell-Hosts näher an und überprüfen direkt auch einige wichtige PowerShell-Grundeinstellungen. Diesen Teil sollten Sie nicht überspringen, denn nur so ist gewährleistet, dass bei Ihnen alle PowerShell-Funktionalitäten richtig funktionieren und Sie mit den aktuellsten Versionen arbeiten.

Anschließend wählen Sie sich unter den verfügbaren Hosts einfach denjenigen aus, der Ihnen am sympathischsten ist. Weil alle Hosts mit derselben unsichtbaren PowerShell zusammenarbeiten, stehen Ihnen in allen Hosts also grundsätzlich die gleichen Befehle zur Verfügung, und auch die Ergebnisse sind die gleichen. Die Wahl des Hosts ist also eine reine Geschmacksfrage und hängt davon ab, wie viel Unterstützung Sie sich bei der Arbeit mit der PowerShell von Ihrem Host wünschen.

Die PowerShell-Konsole einrichten

Die PowerShell-Konsole ist der Basis-Host, der am wenigsten Speicher benötigt und deshalb auch der Standard-Host ist, in dem später fertige Skriptlösungen ausgeführt werden. Zum Entdecken der PowerShell und zum Konzipieren neuer PowerShell-Skripte ist die Konsole weniger gut geeignet, weil sie so spartanisch gestaltet ist und wenig Hilfestellung liefert. Sie wird aber gern genutzt, wenn man nur wenige Befehle einzugeben hat oder die nötigen Befehle ohnehin auswendig kennt.

Um die PowerShell-Konsole erstmals zu starten, öffnen Sie mit image+image das Ausführen-Fenster und geben darin ein: powershell image.

In Windows 10 erreichen Sie PowerShell wahlweise auch wieder über das Startmenü (Abbildung 1.1).

image

Abbildung 1.1: PowerShell über das Startmenü in Windows 10 öffnen.

Wenige Sekunden später präsentiert sich die hochmoderne objektorientierte PowerShell-Konsole. Besonders eindrucksvoll ist das Erlebnis anfangs indes nicht, denn es erscheint nur ein hässliches schwarzes oder blaues Konsolenfenster. Darin begrüßt Sie die Eingabeaufforderung, die mit »PS« beginnt und dahinter den Pfadnamen des aktuellen Ordners anzeigt. Außerdem blinkt eine Einfügemarke und ermuntert Sie mit dem Charme der 1980er-Jahre dazu, erste Befehle einzugeben (Abbildung 1.2).

image

Abbildung 1.2: Die PowerShell-Konsole führt interaktive PowerShell-Befehle aus und benötigt wenig Speicher.

PowerShell-Version kontrollieren

Kontrollieren Sie zuerst, welche PowerShell-Version Sie verwenden. Es gibt fünf Versionen, die aufeinander aufbauen. Dieses Buch handelt von der aktuellsten PowerShell-Version, also 5.0, was Sie inspirieren sollte, Ihre PowerShell-Version ebenfalls auf Versionsstand 5.0 zu aktualisieren, falls Sie eine ältere Version vorfinden. Andernfalls können Sie einige in diesem Buch beschriebene Funktionalitäten nicht nutzen.

Ein besonders einfacher Weg, die Version Ihrer PowerShell zu prüfen, ist ein Blick auf das Copyright, das beim Start der Konsole erscheint:

Copyright-Jahr

PowerShell-Version

2006

Version 1.0. Diese Version ist veraltet und sollte nicht mehr eingesetzt werden.

2009

Version 2.0. Eingeführt mit Windows 7/Windows Server 2008R2. Als Update verfügbar für Windows XP, Vista sowie Windows Server 2003 und 2008.

2012

Version 3.0. Eingeführt mit Windows 8 und Windows Server 2012. Kann auf PowerShell 5.0 aktualisiert werden (außer auf Windows-7-Clients).

2013

Version 4.0. Eingeführt mit Windows 8.1 und Server 2012R2. Kann auf PowerShell 5.0 aktualisiert werden.

2015

Version 5.0. Eingeführt mit Windows 10 und Server 2016.

2016

Version 5.1. Ab dieser Version erhalten Sie künftige Updates automatisch über den Windows-Update-Mechanismus.

2017

Version 6.0. Diese Version wird auch »PowerShell Core« genannt und ist plattformübergreifend auch auf Linux und MacOS verfügbar. Sie ist aber nicht der Nachfolger von PowerShell 5.0, auch wenn die Version dies suggeriert. PowerShell 5 bleibt die in Windows fest integrierte PowerShell-Version und ist auf Windows-Systemen wesentlich leistungsfähiger als PowerShell 6 (siehe auch die Anmerkungen am Anfang des Kapitels).

Tabelle 1.1: PowerShell-Versionen identifizieren.

So finden Sie die aktuell verwendete PowerShell-Version per Befehl heraus:

PS C:\> $PSVersionTable

Name Value

---- -----

PSVersion 5.1.15063.726

PSEdition Desktop

PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}

BuildVersion 10.0.15063.726

CLRVersion 4.0.30319.42000

WSManStackVersion 3.0

PSRemotingProtocolVersion 2.3

SerializationVersion 1.1.0.1

$PSVersionTable liefert Ihnen unter anderem auch die Information PSEdition, die Ihnen mit Desktop verrät, dass Sie die Windows PowerShell verwenden. Steht hier dagegen Core, verwenden Sie die in ihren Funktionen eingeschränkte, aber dafür plattformübergreifende PowerShell 6.0.

Auf Nicht-Windows-Systemen ist das eine gute Idee, weil Ihnen andernfalls überhaupt keine PowerShell zur Verfügung stünde.

Auf Windows-Systemen dagegen wissen Sie inzwischen, dass PowerShell 6 nur über einen eingeschränkten Funktionsumfang verfügt und deshalb Befehle fehlen können, die in diesem Buch beschrieben werden.

Aktuelle Version der PowerShell nutzen

Weil dieses Buch auf der neuesten Version der Windows PowerShell, PowerShell 5.1, basiert, sollten Sie, falls noch nicht geschehen, Ihre PowerShell auf den aktuellsten Stand bringen. So erhalten Sie nicht nur neue und bessere Befehle, die Aktualisierung hat auch einen Sicherheitsaspekt: Die aktuellste Version der PowerShell ist sehr viel sicherer als ältere Versionen, und sobald Sie einmal PowerShell 5.1 installiert haben, übernimmt fortan das normale Windows Update die weitere Aktualisierung.

Ob Ihre PowerShell aktuell ist oder nicht, zeigt Ihnen $PSVersionTable. Hinter PSVersion findet sich die Version Ihrer PowerShell. Steht also hinter PSVersion nicht »5.1«, verwenden Sie eine veraltete Version.

Das kostenfreie Update für PowerShell 5.1 bietet ein Windows-Updatepaket (mit der Erweiterung .msu), das im Internet kostenfrei bereitsteht und per Doppelklick installiert wird. Da sich der Downloadlink ändern kann, öffnen Sie am besten eine Suchseite wie google.de und suchen kurz nach den Stichwörtern »Windows Management Framework 5.1« und »Download«, um das Updatepaket zu finden. Der letzte offizielle Downloadlink bei Drucklegung dieses Buchs war https://www.microsoft.com/en-us/download/details.aspx?id=54616.

Auf Ihrem eigenen Computer ist das Update auf eine neue PowerShell-Version ganz unkompliziert und erfordert höchstens einen Neustart. Bevor Sie allerdings PowerShell auf einem Produktionsserver aktualisieren, informieren Sie sich vorher über die sonstige Software, die darauf läuft. Es gibt Software, die eng mit PowerShell verzahnt ist, beispielsweise Microsoft Exchange oder SQL Server. Diese Programme sind fest an bestimmte PowerShell-Versionen gebunden und müssen gemeinsam mit der PowerShell aktualisiert werden.

Symbol an Taskleiste heften

Als Nächstes sollten Sie die PowerShell-Konsole besser erreichbar machen. Dazu klicken Sie das PowerShell-Symbol in der Taskleiste mit der rechten Maustaste an und wählen im Kontextmenü Dieses Programm an Taskleiste anheften (Abbildung 1.3). Ziehen Sie das Symbol danach in der Taskleiste mit der Maus an den äußersten linken Rand, sodass es das erste Symbol in der Taskleiste ist. Schließen Sie die PowerShell-Konsole und öffnen Sie sie danach erneut mit einem Klick auf das angepinnte Symbol in der Taskleiste.

image

Abbildung 1.3: PowerShell-Symbol an die Taskleiste anheften.

Sie können PowerShell nun auch über die Tastenkombination image+image öffnen oder in den Vordergrund holen, sofern das PowerShell-Symbol das erste in Ihrer Taskleiste ist. Andernfalls verwenden Sie eine andere Zahl, die der Position des Symbols in der Taskleiste entsprechen muss. Spätestens jetzt sollte sich ein blaues und nicht schwarzes Konsolenfenster öffnen. Windows speichert Einstellungen wie die blaue Hintergrundfarbe oder die Bildschirmpuffergröße der Konsole in Verknüpfungen.

Sprungliste: Administratorrechte und ISE

Haben Sie die PowerShell-Konsole wie oben beschrieben an die Taskleiste angeheftet und danach mindestens einmal gestartet, öffnet ein Rechtsklick auf das angeheftete Konsolensymbol nun die PowerShell-Sprungliste: ein Menü mit den wichtigsten PowerShell-Startbefehlen (Abbildung 1.4).

image

Abbildung 1.4: Sprungliste von PowerShell öffnen.

Über die enthaltenen Befehle können Sie PowerShell bei Bedarf mit vollen Administratorrechten starten (was Sie im Normalfall zum eigenen Schutz eher vermeiden und nur einsetzen sollten, wenn diese Rechte tatsächlich gebraucht werden). Auch die ISE, der integrierte Skripteditor, kann über die Sprungliste wahlweise normal oder mit Administratorrechten geöffnet werden.

Befehl

Beschreibung

Als Administrator ausführen

Öffnet die interaktive PowerShell-Konsole mit allen Rechten.

ISE als Administrator ausführen

Öffnet den PowerShell-Editor mit allen Rechten.

Windows PowerShell ISE

Öffnet den integrierten PowerShell-Skripteditor.

Windows PowerShell

Öffnet die interaktive PowerShell-Konsole ohne besondere Rechte.

Tabelle 1.2: Befehle in der PowerShell-Sprungliste.

32-Bit- und 64-Bit-Versionen

Auf 64-Bit-Versionen von Windows gibt es sowohl die PowerShell-Konsole als auch den ISE-Editor in doppelter Ausführung. Neben der 64-Bit-Version stehen zusätzlich 32-Bit-Versionen bereit. Sie sind daran zu erkennen, dass an den Namen ein »(x86)« angefügt ist.

Die 32-Bit-Versionen der PowerShell-Hosts sind nur für Ausnahmefälle gedacht, in denen ein Skript ausdrücklich im 32-Bit-Subsystem ausgeführt werden muss. Nötig ist das nur selten, zum Beispiel dann, wenn PowerShell auf Komponenten zugreifen soll, die es nur als 32-Bit-Versionen gibt. Im normalen Alltag setzen Sie immer die regulären 64-Bit-Versionen ein und achten darauf, dass hinter dem Programmnamen eben nicht der Zusatz »(x86)« steht.

PowerShell ISE einsetzen

Die PowerShell ISE ist ein modernerer PowerShell-Host als die Konsole und bietet zum Beispiel praktische IntelliSense-Menüs mit Befehlsvorschlägen sowie rote Kringellinien, die Fehler anzeigen. Sie öffnen die ISE entweder über ihren Programmnamen powershell_ise.exe oder noch bequemer über den Befehl ise aus einer bereits geöffneten PowerShell-Konsole.

PS> ise image

Wenn Sie die PowerShell-Konsole wie eben beschrieben an Ihre Taskleiste angeheftet haben, genügt auch ein Rechtsklick auf das angeheftete blaue PowerShell-Symbol, um die Sprungliste zu öffnen und darin mit dem Kontextmenübefehl Windows PowerShell ISE die ISE wahlweise mit oder ohne Adminstratorrechte zu starten.

image

Abbildung 1.5: PowerShell ISE als Konsolenersatz.

Weil PowerShell ISE nicht nur ein moderner Ersatz für die interaktive Konsole ist, sondern auch als Skripteditor dient, sieht das Fenster möglicherweise bei Ihnen etwas anders aus als das in Abbildung 1.5. Mit der Pfeilschaltfläche in der oberen rechten Ecke blenden Sie den Skriptbereich ein und aus. Im Augenblick sollten Sie den Skriptbereich im versteckten Zustand belassen. Über image+image kann der Skriptbereich gänzlich mauslos sichtbar und wieder unsichtbar gemacht werden.

Hilfreich sind auch die Schaltflächen in der Symbolleiste, mit denen Sie den interaktiven Konsolenteil wahlweise unten oder an der Seite anzeigen oder bei Bedarf eben auch ganz ausblenden, um maximalen Platz zur Eingabe von Skripten zu haben (Abbildung 1.6).

image

Abbildung 1.6: Über die Werkzeugleiste kann die interaktive PowerShell-Konsole ein- und ausgeblendet werden.

Mit dem Schieberegler am unteren rechten Fensterrand variieren Sie nahtlos die Schriftgröße. Ohne Maus verwenden Sie dazu image+image und image+image.

Möchten Sie auch die Schriftart ändern, rufen Sie Tools/Optionen auf. Im Dialogfeld aktivieren Sie das Kontrollkästchen Nur Festbreitenschriftart, denn PowerShell ISE kommt zwar im Unterschied zur Konsole auch mit Proportionalschriftarten zurecht, aber weil hier die Schriftzeichen unterschiedlich breit sind (einem m wird zum Beispiel mehr Platz eingeräumt als einem i), führt dies zu Problemen bei der Ausgabe, wenn Tabellenspalten verrutschen und nicht mehr bündig erscheinen (Abbildung 1.7).

Im Listenfeld Schriftfamilie sehen Sie jetzt alle Schriftarten mit fester Zeichenbreite. Die Schriftart, die Sie auswählen, gilt sowohl für den interaktiven Konsolenbereich als auch den Skripteditor. Nicht alle Schriftarten, die die Liste anbietet, sind wirklich gut zu gebrauchen. Eine besonders gut lesbare Schriftart heißt »Consolas«. Die »Lucida Console« ist die Standardschriftart.

image

Abbildung 1.7: Andere Schriftart für ISE auswählen.

Notfalls stellt die Schaltfläche Standard wiederherstellen in der linken unteren Ecke des Dialogfelds die Ausgangseinstellungen wieder her.

Hinweis

Genügt Ihnen der eingebaute Funktionsumfang der ISE nicht, lässt er sich über kommerzielle und kostenfreie Erweiterungen ergänzen. Die folgenden Beispiele und Befehle müssen in der ISE ausgeführt werden.

Eine häufig genutzte kostenfreie Erweiterung ist zum Beispiel der »ISE Project Explorer«, mit dem Sie Projekte, die aus mehreren Dateien bestehen, direkt in der ISE verwalten können.

So wird das Modul heruntergeladen und installiert:

PS> Install-Module -Name PSISEProjectExplorer -Scope CurrentUser image

Wenn Sie das zum ersten Mal tun, wird nachgefragt, ob eine kostenfreie Downloadkomponente installiert werden soll. Stimmen Sie zu. Anschließend wird gefragt, ob Sie die Erweiterung laden möchten. Wenn Sie erneut zustimmen, können Sie den Project Explorer künftig mit diesem Befehl laden:

PS> Import-Module PsISEProjectExplorer image

Möchten Sie das nicht jedes Mal durchführen, kann die Erweiterung auch automatisch geladen werden, wenn Sie den folgenden Befehl verwenden.

PS> Add-PsISEProjectExplorerToIseProfile image

Achtung

Diese Erweiterung ist kostenfrei, weil sie von ambitionierten Anwendern als Hobbyprojekt betrieben wird. Sie kann ausgezeichnet funktionieren, aber auch dazu führen, dass die ISE instabil wird, weil sie nicht professionell entwickelt wurde. Ob sie für Sie nützlich ist, müssen Sie selbst prüfen.

Testen Sie die Erweiterung daher ausgiebig, bevor Sie sie automatisch laden lassen. Ohne Autostart brauchen Sie nur die ISE neu zu starten, um die Erweiterung wieder loszuwerden.

Wie Autostarts funktionieren und wie Sie den Autostart auch wieder entfernen können, lesen Sie etwas später in Kapitel 5. Hinter dem Autostart stehen nämlich sogenannte Profilskripte, die – falls vorhanden – beim Start der PowerShell automatisch ausgeführt werden.

Sobald die Erweiterung geladen ist, wird über ein weiteres Panel rechts damit begonnen, die Dateien in Ihrem Dokumente-Ordner zu analysieren. Sie können darin künftig bequem zu Skriptdateien navigieren, vor allem aber über das Textfeld am Oberrand blitzschnell Dateien finden, die bestimmte Stichwörter enthalten. Das indes funktioniert erst, nachdem die Erweiterung die Suche abgeschlossen und seinen Dateiindex erstellt hat.

Eine sehr verbreitete kommerzielle Erweiterung heißt »ISESteroids«, die zum Beispiel Echtzeit-Codeverbesserungen, einen Variablenmonitor und automatische Codegeneratoren liefert. Diese Erweiterung kann testweise ohne Einschränkungen genutzt werden und wird über diesen Befehl heruntergeladen und installiert:

PS> Install-Module ISESteroids -Scope CurrentUser image

Nach Download und Installation wird die ISESteroids-Erweiterung mit dem folgenden Befehl bei Bedarf geladen:

PS> Start-Steroids image

Tipp

PowerShell ISE erhält in der Taskleiste ein eigenes Symbol. Um ISE künftig direkt per Klick zu starten, klicken Sie mit der rechten Maustaste auf das Symbol von ISE in der Taskleiste und wählen Dieses Programm an Taskleiste anheften. Danach schieben Sie es nach links neben das Symbol der PowerShellKonsole und können nun per Klick entscheiden, ob Sie die klassische Konsole oder lieber ISE öffnen möchten.

Denken Sie aber daran, dass nur das Symbol der PowerShell-Konsole per Rechtsklick die Sprungliste öffnet. Das Symbol der ISE verfügt über keine Sprungliste.

VSCode und PowerShell

Neuerdings steht mit »VSCode« ein weiterer kostenfreier Texteditor zur Verfügung, der im Gegensatz zu ISE viele weitere Skriptformate unterstützt und außerdem plattformunabhängig auch auf Linux und MacOS zur Verfügung steht.

Er richtet sich allerdings an erfahrenere Anwender, weil vieles nur über kryptische Befehlskürzel angesprochen werden kann. Hier kann VSCode heruntergeladen werden: https://code.visualstudio.com/download.

PowerShell-Erweiterung laden

Damit VSCode zu einem vollwertigen PowerShell-Host wird, klicken Sie nach seiner Installation und anschließendem Start in der linken Symbolleiste auf das unterste Symbol. Auf diese Weise öffnet sich eine Spalte mit Editorerweiterungen, die anfangs noch leer ist. Geben Sie ins Textfeld an seinem oberen Rand powershell ein.

image

Abbildung 1.8: PowerShell-Erweiterung in VSCode installieren.

Wenig später wird die Erweiterung »PowerShell« gefunden, die mit einem Klick auf Install heruntergeladen und installiert wird. Nach einem Neustart ist die Erweiterung geladen.

VSCode zeigt Ihnen nun nicht nur unten eine PowerShell-Konsole an, sondern bietet jetzt auch umfangreiche IntelliSense- und andere Hilfen an, wenn Sie PowerShell-Skripte laden.

Um ein Skript auszuführen, sind indes Tastenkombinationen nötig. Mit image wird ein gesamtes Skript ausgeführt und mit image die aktuelle Selektion. Die gleichen Tastenkombinationen gelten ebenfalls in der ISE, jedoch stehen hier dafür auch Schaltflächen zur Verfügung.

Im Rahmen dieses Buchs werden die vielen weiteren Möglichkeiten von VSCode nicht weiter vertieft. Da aktuell beinahe wöchentlich Aktualisierungen bereitgestellt werden, ändern sich viele Bedienkonzepte derzeit noch.

Erste Schritte mit PowerShell

Die Ausführung von Befehlen funktioniert in allen PowerShell-Hosts gleich: Sie geben einen Befehl ein, schicken ihn mit einem entschlossenen Druck auf image ab und warten dann gespannt, was als Nächstes geschieht. Wie Sie herausfinden, welche Befehle Ihnen zur Verfügung stehen, werden Sie gleich erfahren.

Wichtige Vorsichtsmaßnahmen

Damit das, was dann als Nächstes geschieht, keine unschöne Überraschung wird, sind ein paar vorausschauende Vorsichtsmaßnahmen ratsam. Mit nur zwei simplen Regeln entschärfen Sie das Potenzial karrierelimitierender Fehleingaben erheblich:

  1. Keine Administratorrechte: Starten Sie PowerShell ohne spezielle Administratorrechte! So sind alle Einstellungen gesperrt, die das System ernstlich in Bedrängnis brächten. Ist die Windows-Benutzerkontensteuerung aktiv, passiert das automatisch (sofern Sie nicht über die Sprungliste auf vollen Administratorrechten bestehen). Ob PowerShell mit vollen Administratorrechten arbeitet, zeigt die Titelleiste des Fensters, in der dann das Wort Administrator: erscheint. Auf Servern ist die Windows-Benutzerkontensteuerung indes meist ausgeschaltet, sodass PowerShell hier stets mit vollen Rechten startet und Sie für erste Tests und die Einarbeitung in PowerShell besser ein eingeschränktes Benutzerkonto einrichten und verwenden sollten.
  2. Simulationsmodus: Schalten Sie einen versteckten Simulationsmodus für noch mehr Schutz (und Einschränkungen) ein. Er bewirkt, dass PowerShell Änderungen am Computer nur simuliert, aber nicht ausführt. Dieser Schutz erstreckt sich auf die eingebauten PowerShell-Befehle, nicht aber auf klassische Konsolenbefehle wie beispielsweise shutdown.exe. So wird der Simulationsmodus eingeschaltet:

    PS> $WhatIfPreference = $true image

    Er gilt nur für die PowerShell-Instanz, in der der Befehl eingegeben wurde, und auch nur, bis diese Instanz wieder geschlossen wird.

Befehle eingeben

Im Fenster sehen Sie die Eingabeaufforderung. Sie beginnt mit PS, und dahinter steht der Pfadname des Ordners, in dem Sie sich gerade befinden. Eine blinkende Einfügemarke wartet auf Ihre ersten Eingaben. Sie werden gleich erfahren, welche Befehle PowerShell versteht, probieren Sie die Eingabe aber schon einmal aus. Geben Sie zum Beispiel ein:

PS> hallo image

Sobald Sie image drücken, wird Ihre Eingabe an PowerShell geschickt und verarbeitet. Das Ergebnis folgt postwendend und ist in diesem Fall eine nüchterne rote Fehlermeldung:

hallo : Die Benennung "hallo" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei

oder eines ausführbaren Programms

erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie den Vorgang.

In Zeile:1 Zeichen:1

+ hallo

+ ~~~~~

+ CategoryInfo : ObjectNotFound: (hallo:String) [], CommandNotFoundException

+ FullyQualifiedErrorId : CommandNotFoundException

Fehlermeldungen sind zwar üblicherweise eher unerfreulich, doch sollten Sie sich schon einmal daran gewöhnen, sie nicht routinemäßig zu ignorieren. Oft verraten sie bei PowerShell tatsächlich den Grund des Problems, und auch in diesem Beispiel ist das, was die Fehlermeldung zu sagen hat, recht treffend: Die Benennung »hallo«, also das, was Sie als Befehl an PowerShell geschickt haben, war kein ausführbarer Befehl. Ausführbare Befehle sind gemäß Fehlermeldung Cmdlets, Funktionen, Skriptdateien oder ausführbare Programme.

Den kryptischen Teil nach dem Klartext dürfen Sie freundlich ignorieren. Er verrät erfahrenen PowerShell-Skriptentwicklern bei Bedarf noch mehr über die Natur des Fehlers und wo genau er aufgetreten ist. Spannend wird dieser Teil erst, wenn Sie umfangreichere PowerShell-Skripte starten.

Profitipp

Falls es Sie stört, dass PowerShell in epischer Breite den Pfadnamen des aktuellen Ordners im Prompt anzeigt, geben Sie einmal diesen Befehl ein:

PS> cd \ image

Damit wechseln Sie in den Stammordner des aktuellen Laufwerks, also vermutlich nach C:\, und der Prompttext wird jetzt wesentlich kürzer und vergeudet keinen wertvollen Platz mehr in der Konsole. Später werden Sie bessere Wege kennenlernen, um den Prompt angenehmer zu formatieren, aber einstweilen hilft dieser Kniff schon mal weiter.

Ergebnisse empfangen

Geben Sie einen gültigen Befehl ein, wirft PowerShell fröhlich die erwarteten Ergebnisse aus. Möchten Sie zum Beispiel sehen, welche Dateien und Ordner sich in Ihrem aktuellen Ordner befinden, geben Sie ein: dir image.

Sie erhalten eine mehr oder weniger lange Textliste, und es drängt sich das Gefühl auf, dass der Ordnerinhalt in einem normalen Explorer-Fenster mit seinen bunten Symbolen viel einfacher zu erfassen ist. Grundsätzlich kommuniziert PowerShell mit Ihnen auf Textbasis. Dass PowerShell mehr kann als ein Explorer-Fenster, zeigt der nächste Befehl, der sämtliche laufenden Prozesse auflistet:

PS> Get-Process image

Die Stärke von PowerShell ist also nicht unbedingt die Darstellung der Informationen, sondern vielmehr ihre ungeheure Flexibilität. Fast alle Belange und Informationen Ihres Computers lassen sich von hier aus steuern und anzeigen – wenn auch »nur« als Textdarstellung und mithilfe von Textbefehlen.

Hier die wichtigsten weiteren Grundregeln:

Informationen speichern oder umleiten

Alle Befehle der PowerShell liefern »körperlose«, nackte Informationen. Wie diese letzten Endes dargestellt oder verwendet werden, steht auf einem anderen Blatt. Im einfachsten Fall unternehmen Sie nichts weiter mit den Informationen. Sie oxidieren dann automatisch zu Text, den die Konsole anzeigt.

Alternativ könnten Sie die Informationen aber auch auf genau zwei Arten weiterverarbeiten:

Tun Sie nichts von beidem, werden die Ergebnisse stets in der Konsole angezeigt. Tun Sie beides, hat die Pipeline Vorrang.

Variablen verwenden

Variablen werden bei PowerShell immer mit einem $ gekennzeichnet. Ansonsten arbeiten sie sehr unbürokratisch und müssen nicht besonders deklariert werden. Sie funktionieren wie Aufbewahrungsboxen für Informationen:

PS> $info = ipconfig.exe image

Die Informationen des Befehls liegen jetzt in der Variablen und werden nicht sichtbar ausgegeben. Erst wenn Sie die Variable ausgeben, tauchen die Informationen wieder auf:

PS> $info image

Windows-IP-Konfiguration

Drahtlos-LAN-Adapter Wi-Fi:

Verbindungsspezifisches DNS-Suffix: Speedport_W_921V_1_39_000

IPv6-Adresse. . . . . . . . . . . : 2003:40:e765:5043:7ca6:5208:b378:5c84

Temporäre IPv6-Adresse. . . . . . : 2003:40:e765:5043:6485:6291:7855:a81

Verbindungslokale IPv6-Adresse . : fe80::7ca6:5208:b378:5c84%11

IPv4-Adresse . . . . . . . . . . : 192.168.2.119

Subnetzmaske . . . . . . . . . . : 255.255.255.0

Standardgateway . . . . . . . . . : fe80::1%11

192.168.2.1

Ethernet-Adapter Bluetooth Network Connection:

Medienstatus. . . . . . . . . . . : Medium getrennt

Verbindungsspezifisches DNS-Suffix:

(…)

Mit Operatoren lassen sich die Informationen in Variablen dann zum Beispiel bearbeiten. Der nächste Befehl fischt aus der Variablen nur die Zeilen heraus, die den Begriff »IPv4« enthalten:

PS> $info -like '*IPv4*' image

IPv4-Adresse . . . . . . . . . . : 192.168.2.119

Pipeline verwenden

Mit der Pipeline (|) reichen Sie die Informationen von einem Befehl direkt an den nächsten weiter. Ein sehr wichtiger Befehl ist zum Beispiel Out-GridView. Er zeigt die Ergebnisse in einem Extrafenster an, das beinahe so aussieht wie ein Excel-Fenster. So bleiben die Informationen nicht nur im Blick, es wird auch (anders als in der Konsole) bei Platzmangel nichts abgeschnitten. Und ein Klick auf eine Spaltenüberschrift sortiert auch gleich den Inhalt.

PS> ipconfig.exe | Out-GridView image

Richtig gut funktioniert das, wenn Befehle nicht reinen Text zurückliefern, sondern sogenannte »Objekte«. Objekte strukturieren Informationen in einzelnen Spalten, den sogenannten »Eigenschaften« oder »Properties«. Der nächste Befehl liefert beispielsweise alle Dienste und verrät interessante Details zu jedem Dienst: