Windows PowerShell

Die Windows PowerShell (powershell.exe), zeitweise auch bekannt unter den Codenamen Monad und Microsoft Command Shell (MSH), ist ein Kommandozeileninterpreter von Microsoft. Es ist eine Alternative zum Windows-Kommandozeilenprogramm cmd.exe und zum Windows Script Host.

Die auf dem .NET-Framework basierende Windows PowerShell verbindet die aus Unix-Shells bekannte Philosophie von Pipes und Filtern mit dem Paradigma der objektorientierten Programmierung. Der Benutzer kann wie bisher einfache Befehle an einer Kommandozeile ausführen und miteinander verknüpfen oder aber auch komplexe Skript-Programme mit der eigens dafür entwickelten PowerShell Scripting Language schreiben.

Ursprünglich war die erste Veröffentlichung der PowerShell als Bestandteil von Windows Vista am 30. November 2006 geplant. Sie wurde aber nur mit dem gleichzeitig veröffentlichten Microsoft Exchange Server 2007 ausgeliefert. Auf allen nachfolgenden PC-Betriebssystemen von Microsoft ist die PowerShell bereits vorinstalliert.

Die Versionen 1.0 und 2.0 werden auch für die Betriebssysteme Windows XP, Windows Server 2003 und Windows Vista zum kostenlosen Herunterladen angeboten.

In Windows 7 wird die PowerShell in der Version 2.0 vorinstalliert. Sie enthält unter anderem die grafische Entwicklungsumgebung PowerShell ISE (Integrated Scripting Environment). Sie unterstützt das Autovervollständigen von Befehlen, farbliche Syntaxkennzeichnungen und enthält einen Script-Debugger.

Windows 8 wird mit der Version 3

MCM Taschen Boston

MCM Taschen Boston

BUY NOW

€715.00
€60.44

.0 der PowerShell geliefert. Als wesentliche Neuerungen bringt sie die Unterstützung für Workflows auf Basis der Windows Workflow Foundation, Remote-Sessions, die unterbrochen und später auch von einem anderen PC aus wiederaufgenommen werden können, sowie die Möglichkeit, Skripte zeitgesteuert oder abhängig von Ereignissen auszuführen. PowerShell 3.0 ist als Teil des Windows Management Framework 3.0 auch für Windows 7 SP1 und Windows Server 2008 R2 SP1 verfügbar; für XP und Vista jedoch nicht.

Das Management Framework 4.0 für Windows 7 SP1 und Windows Server 2008 R2 SP1 wurde am 24. Oktober 2013 als finale Version veröffentlicht. Es wird mit Windows Server 2012 R2, sowie Windows 8.1 standardmäßig ausgeliefert und enthält als bedeutendste Neuerung das Desired State of Configuration, mit dem Administratoren Serverkonfigurationen beschreiben, implementieren und überprüfen können.

Anfang April 2014 wurde eine Vorabversion des Management Framework 5.0 bereitgestellt. Die wichtigsten Neuerungen ist die Möglichkeit Softwarepakete über NuGet-Repositories wie etwa Chocolatey zu installieren, sowie die Möglichkeit Switches zu verwalten, welche den CIM-Standard unterstützen. Eine weitere Neuerung ist die Möglichkeit Klassen mit Hilfe des Schlüsselwortes class zu erstellen.

Den Kern der PowerShell bilden kleine Funktionseinheiten, genannt Cmdlets (gesprochen command-lets), die dem Benennungsschema Verb-Substantiv folgen, also beispielsweise Get-Help oder Set-Location, wobei die Groß-/Kleinschreibung keine Rolle spielt. Da die Bezeichnungen einiger Cmdlets relativ lang sind, können kürzere Alias-Namen vergeben werden, von denen bereits einige standardmäßig vordefiniert sind, unter anderem als Hilfe für Umsteiger von Unix-Shells oder der DOS/NT-Kommandozeile (beispielsweise ls, dir, cp, …). Powershell 2.0 enthält 236 Cmdlets, 37 Functions (mitgelieferte Funktionen) sowie 137 Aliase, Powershell 4.0 bereits 538 Cmdlets, 712 Functions und 150 Aliase.

Die Cmdlets sind als spezielle .NET-Klassen implementiert, welche als Eingabe bestimmte Parameter (gekennzeichnet durch ein vorangestelltes „-“) und Objekte annehmen und als Ausgabe wiederum Objekte zurückliefern, die dann beispielsweise als Tabelle formatiert ausgegeben oder zur weiteren Verarbeitung an andere Cmdlets weitergeleitet werden können. Da die Ausgabe nicht als Textstrom erfolgt, sondern als strukturiertes Objekt, lassen sich bestimmte Eigenschaften leicht ohne aufwändige Textanalyse selektieren und manipulieren. Analysen über Reguläre Ausdrücke sind jedoch ebenfalls möglich. Zurückgelieferte Objekte können auch in Variablen gespeichert und an anderer Stelle wiederverwendet werden.

Die Funktionalität der PowerShell lässt sich durch sogenannte Snap-Ins erweitern, welche auf einen Schlag ganze Sätze von zusätzlichen Cmdlets importieren und dem Benutzer zur Verfügung stellen. Mittels Get-Help werden Hilfeseiten zu Cmdlets angezeigt, die dem Format von Unix-Manpages ähnlich sind. Falls Cmdlets mit dem speziellen Parameter „-whatif“ aufgerufen werden, wird der Benutzer darüber informiert, was passiert wäre, eine Aktion findet jedoch nicht statt.

Neben den Cmdlets lassen sich direkt von der Kommandozeile auch herkömmliche Programme, selbstdefinierte Funktionen, Skripte und Batch-Dateien starten, ebenso Dokumente, die beim Aufrufen mit dem dazugehörigen Anwendungsprogramm geöffnet werden.

Die PowerShell erlaubt Zugriff auf WMI-Klassen, COM-Objekte sowie auf das gesamte .NET-Framework.

Über sogenannte Provider können hierarchische Strukturen wie die Windows-Registrierungsdatenbank, der Variablen-Namensraum und andere als virtuelle Laufwerke eingebunden und wie ein Dateisystem navigiert, referenziert und bearbeitet werden, zum Beispiel „Env:“, „HKLM:“, „Variable:“ oder „Function:“. Diese werden jedoch nicht im Windows-Explorer angezeigt.

Für den interaktiven Betrieb bietet die PowerShell eine automatische Befehlszeilenergänzung per Tabulatortaste für Cmdlets, Parameter, Eigenschaften sowie Datei- und Verzeichnisnamen, die bei Bedarf vom Benutzer an seine eigenen Bedürfnisse angepasst werden kann.

Anders als bei bisher existierenden objektorientierten Skript-Interpretern (BeanShell, Smalltalk, Python Shell) ist die Syntax der PowerShell-Skriptsprache, welche sich unter anderem Anleihen bei Perl, Unix-Shells, SQL und C# nimmt, darauf ausgelegt, auch für den täglichen interaktiven Gebrauch als Shell für administrative Aufgaben wie etwa Dateiverwaltung geeignet zu sein.

Alle Powershell-Versionen sind grundsätzlich rückwärts kompatibel mit den Vorgängerversionen. Die allermeisten Cmdlets funktionieren in allen Versionen (sofern schon vorhanden) gleich. Um sicher zu gehen, sollten die jeweiligen Release-Notes (Teil des Downloads) auf Hinweise geprüft werden. Seit Powershell 3.0 kann zusätzlich zu der jeweilig installierten Powershell-Version eines Systems, auch die Version 2.0 gestartet werden. Dies geschieht, indem man die powershell.exe mit dem Parameter „-version 2“ startet. Damit das funktioniert, muss auf dem System außerdem das .Net-Framework 2.0 installiert sein.

Cmdlets sind in einer .NET Sprache verfasste Erweiterungen für die Powershell. Zusätzlich ist es möglich, Skripte in der Powershell-Skriptsprache zu verfassen, die sich wie Cmdlets verhalten. Die folgende Tabelle stellt eine Auswahl der mitgelieferten Cmdlets den vergleichbaren Befehlen anderer Kommandozeileninterpreter gegenüber.

Die Verben, mit denen Cmdlets beginnen können, lassen sich in Gruppen klassifizieren: Die Liste der möglichen Verben ist abhängig von der verwendeten PowerShell-Version und kann mit Get-Verb abgerufen werden.

Andere Verben wie etwa checkout und commit sind zwar möglich, aber nicht zulässig. Stattdessen sind die Standardverben wie Request und Submit zu verwenden. Weitere Verben können jedoch in Form eines Alias definiert sein. Um cmdlets mit bestimmten Verben aufzulisten, kann der Befehl Get-Command -Verb <string[]> verwendet werden.

Cmdlets werden in einem Snap-In zusammengefasst. Snap-Ins werden mit InstallUtil.exe AssemblyName.dll installiert, welches ein Bestandteil des .NET Frameworks ist. Installierte Snap-Ins können anschließend mit Add-PSSnapin aktiviert werden. Aktive Snap-Ins können mit Get-PSSnapin bzw. Get-PSSnapin -Registered aufgelistet und mit Remove-PSSnapin entfernt werden.

Ein Snap-In sieht in C# wie folgt aus:

PowerShell-Skripte sind dynamisch typisiert. Dabei kommt ein erweitertes Typsystem (englisch: extended type system, ETS) zum Einsatz, bei dem .NET-Objekte in der Klasse PSObject gekapselt werden. PSObject stellt hierbei die Basisklasse für PowerShell-Objekte dar. PSObject entspricht damit einer Monade.

PowerShell bietet implizite Typkonvertierung. Dabei kommen Typkonverter zum Einsatz, von denen einige vorgegeben sind:

Provider sind PowerShell-SnapIns, welche z. B. den Zugriff auf hierarchische Daten (NavigationCmdletProvider) oder Schlüssel-Wert Paare (ContainerCmdletProvider) ermöglichen mcm taschen sale. Abhängig vom Typ des Providers wird eine bestimmte Menge an Cmdlets bereitgestellt. Die aktiven Provider können mit dem Befehl Get-PSProvider aufgerufen werden.

PowerShell Skripte können in einer Skript-Datei zusammengefasst werden. Skript-Dateien enthalten Funktionen mit zugehöriger Beschreibung in einem Kommentarblock, sowie Variablen und Befehle. Skript-Dateien haben die Endung .ps1 und werden mit dem Befehl ., gefolgt vom vollständigen Namen der Datei geladen und verarbeitet.

Funktionen, Typdefinitionen, Snap-Ins, Cmdlets und Provider können zu einem Modul zusammengefasst werden. Die Umgebungsvariable $env:PSModulePath zeigt auf die Verzeichnisse, in denen die PowerShell Konsole nach Modulen sucht um diese beim Start automatisch einzubinden.

Module werden nicht mit InstallUtil.exe installiert, sondern lediglich in ein Verzeichnis kopiert, welches in $env:PSModulePath eingetragen ist. Der Verzeichnisname des Moduls muss hierbei mit dem Namen der Manifest-Datei des Moduls (*.psm1) übereinstimmen. Anschließend kann das Modul mit Import-Module geladen werden.

Die Befehle um Module zu verwalten erhält man mit Get-Command *-Module*. Module können mit Hilfe des Befehls New-Module und das zugehörige Manifest mit New-ModuleManifest erzeugt werden.

Ein Modulskript bindet PowerShell-Skripte ein und exportiert Funktionen, Cmdlet’s, Variablen und Aliase, welche vom Benutzer verwendet werden sollen, mit Export-ModuleMember.

Gib die Zeichenfolge „Hallo Welt!“ auf der Konsole aus:

Beende alle Prozesse, deren Namen mit dem Buchstaben „p“ beginnen:

Suche alle Prozesse, die mehr als 10 MB Hauptspeicher verwenden, und beende sie:

Berechne die Gesamtanzahl der Bytes aller Dateien in einem Verzeichnis:

Warte, bis ein bestimmter Prozess beendet wurde:

Ändere eine Zeichenkette von Kleinbuchstaben in Großbuchstaben:

Füge die Zeichenfolge „ABC“ nach dem ersten Buchstaben des Wortes „string“ ein, um als Ergebnis „sABCtring“ zu erhalten:

Lade einen bestimmten RSS-Web-Feed herunter und zeige die Überschriften der acht neuesten Einträge:

Lösche die komplette Festplatte ohne Rückfrage, Äquivalent zu rm -rf / unter Unix:

Unterstützt werden unter anderem folgende Systeme:

Deutsch

Englisch

Schnellreferenzen

Einführung

Wikis und Blogs

Cmdlets und Module

Portierungen

BDD und Unit Testing Frameworks

Skript Management

Sonstiges