Aufbau

PowerShell wurde speziell für die Systemverwaltung und -automatisierung entworfen[18]

Sie 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.

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

PowerShell Engine

Die PowerShell Engine (auch Shell, PowerShell Class oder PowerShell Runtime) ist der Kommandozeileninterpreter, der die Eingaben verarbeitet und damit das Herz der PowerShell. Die Engine ist eine Sammlung von .NET-Klassen, die in einer DLL (System.Management.Automation.dll) gespeichert sind.

PowerShell Host

Der PowerShell Host ist die Benutzerschnittstelle zur PowerShell Engine. In Windows steht standardmäßig die Windows PowerShell (auch Konsole) (powershell.exe, bereitgestellt durch conhost.exe) und Windows PowerShell ISE (Integrated Scripting Environment, kurz ISE) (powershell_ise.exe) zur Verfügung. Die ISE ist ein modernes Eingabefenster mit unter anderem integriertem Skripteditor, Debugger und IntelliSense. Beide Hosts erlauben es auch, herkömmliche Kommandozeilenanwendungen auszuführen, wie beispielsweise ipconfig.exe. Jedoch erlaubt die ISE keine Interaktion, wie zum Beispiel bei nslookup.exe. Die ISE kann durch Add-ons erweitert werden; eine bekannte Erweiterung ist ISESteroids. Auch Verwaltungskonsolen, wie etwa die Exchange Management Console (EMC) seit Exchange Server 2007, sind ein Host. Darüber hinaus gibt es auf dem Markt weitere Hosts, wie PowerShell Plus von Idera. Zwar nutzen alle Hosts dieselbe Engine, doch da die Implementierung unterschiedlich sein kann, ist es auch möglich, dass sich die Hosts untereinander unterschiedlich verhalten.

PowerShell Scripting Language

Die PowerShell Scripting Language ist die Sprache um Skripte für die PowerShell Engine zu entwickeln. Ab Version 2.0 kann die Skriptsprache auch verwendet werden, um eigene Cmdlets zu erstellen. Mit Version 5 wurde die Skriptsprache um Klassen erweitert.

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.

Cmdlets

Cmdlets (gesprochen Commandlets) werden die Befehle in einer PowerShell-Umgebung genannt. Der Begriff soll verdeutlichen, dass es sich um sehr kleine, spezielle Befehle handelt, etwa wie in Befehlchen. Im Gegensatz zu herkömmlichen Befehlen sind Cmdlets keine Stand-Alone-Anwendungen, das heißt, sie können nicht ohne die PowerShell ausgeführt werden. Cmdlets können .NET-Klassen oder PowerShell-Skripte sein und mit wenigen Zeilen Programmcode geschrieben werden. Cmdlets parsen Eingaben in der Regel nicht selber, stellen Fehler nicht selbst dar und geben Ergebnisse unformatiert als Objekt wieder.[19] Die PowerShell-Engine bzw. Standard-Cmdlets nehmen Cmdlet-Entwicklern Arbeit von Standardaufgaben ab und vereinfachen und beschleunigen die Entwicklung. Gleichzeitig wird die Nutzbarkeit und Lesbarkeit von Skripten und Befehlen durch sehr strikte und ausführliche Namenskonventionen gewährleistet.

Die Anzahl der vorinstallierten Cmdlets steigt mit jeder Version. Sie liegt in der Version 5.1 der Legacy-PowerShell bei 489 Cmdlets und 766 mitgelieferten Funktionen und in der Core-Version 6.1 bei 287 Cmdlets und 145 mitgelieferten Funktionen im Kernpaket und 1900 Cmdlets mit zusätzlichen Modulen.

Cmdlets folgen dem Namensschema Verb-Substantiv, also beispielsweise Get-Help oder Set-Location. Cmdlets sind durch das vorangestellte Verb aufgabenorientiert, sollen genau eine spezifische Aufgabe erfüllen und nur einen Objekttyp ausgeben, wie zum Beispiel Get-Process, das alle laufenden Prozesse auflistet und als Objekt vom Typ System.Diagnostics.Process ausgibt. Das Beenden von Prozessen ist eine eigene Aufgabe und ist daher ein eigenes Cmdlet (Stop-Process). Das Auflisten von Diensten gibt andere Eigenschaften als bei Prozessen aus und hat daher ein anderes Substantiv (Get-Service). Die resultierenden Objekte können sodann weiterverarbeitet werden. So ist es möglich, Objekte zu filtern (Select-Object -Property Name,Status, Where-Object -Property Status -EQ -Value Stopped), zu konvertieren (Converto-Json) oder auszugeben (Out-File, Out-GridView).

Microsoft hat eine Liste mit erlaubten Verben veröffentlicht. Die Einhaltung der Verben wird nicht technisch erzwungen. Sie wird jedoch empfohlen, um die Bedienung zu vereinheitlichen.[22] Die Liste der freigegebenen Verben kann mit Get-Verb abgerufen werden.

Für Cmdlets können Aliase hinterlegt werden, etwa um Kompatibilität zu alten Skripten herzustellen, das Umsteigern von anderen Systemen leichter zu machen oder einfach Befehle mit weniger Buchstaben ausführen zu können. Einige dieser Aliase werden bereits durch Module vordefiniert. So wird beispielsweise das Cmdlet Set-Location verwendet, um das aktuelle Verzeichnis des Hosts zu definieren, es sind jedoch auch die Aliase sl, cd und chdir verwendbar.

Zuletzt geändert: Dienstag, 5. April 2022, 14:52