PowerShell vs. CMD: Die Leistungsfähigkeit von Windows nutzen

PowerShell vs. CMD: Die Leistungsfähigkeit von Windows nutzen

Windows PowerShell wurde mit Windows 7 eingeführt und ist ein leistungsstarkes Framework für automatisierte Aufgaben, das über 130 allgemeine Befehlszeilentools umfasst. PowerShell ist eine Kombination aus Skriptsprache und Befehlszeilen-Shell und wurde von Microsoft entwickelt, um IT-Administratoren die Möglichkeit zu geben, Aufgaben auf Windows-Rechnern per Fernzugriff oder lokal auszuführen.

Die Befehlszeilenschnittstellen (CLIs) von Microsoft, die ein Vorläufer von PowerShell sind, haben einen viel einfacheren Funktionsumfang. Vor PowerShell gab es eine Reihe von CLIs, die einen ähnlichen Zweck erfüllten und deren Ursprünge bis zu command.com zurückreichen, dem MS-DOS-Interpreter und der Shell in Windows 9x-Systemen. CMD.exe nahm den Platz von command.com in Windows NT ein und stattete diesen Dienst mit Funktionen wie Befehlszeilenvervollständigung, Zugriff auf den Befehlsverlauf und genaueren Fehlermeldungen aus.

Die Ursprünge der PowerShell lassen sich bis ins Jahr 2002 zurückverfolgen, und zwar in einem Projekt, das als Microsoft Shell (auch bekannt als Monad) bekannt ist. Es dauerte jedoch bis 2006, bis das Unternehmen den Namen änderte und die PowerShell mit Windows 7 bündelte. Seitdem ist die PowerShell ein wesentlicher Bestandteil des Windows-Ökosystems.

Obwohl PowerShell und CMD.exe auf demselben System verwendet werden können, hat der Zweck von CMD.exe im Laufe der Zeit an Bedeutung verloren. Seit November 2017 ist die Standard-Befehlsshell die PowerShell und nicht mehr die CMD.exe, und Benutzer können direkt über den Datei-Explorer darauf zugreifen.

Warum also der Wechsel zur PowerShell?

Die Einschränkungen in CMD.exe können die Gründe für diese Änderung im Wesentlichen erklären. Obwohl mit diesem Dienst grundlegende Verwaltungsbefehle auf einem Gerät ausgeführt werden können, ist es nicht möglich, 400 Maschinen gleichzeitig zu verwalten oder bestimmte Datenverarbeitungselemente wie virtuelle Cloud-Server aus der Ferne zu steuern.

CMD.exe wurde nie für die Bewältigung solch komplexer Computeraufgaben konzipiert, und genau hier kommt PowerShell ins Spiel. Diese Plattform ist in der Lage, Geräte in der Azure-Cloud zu verwalten, virtuelle Maschinen (VMs) zu erstellen und zu überwachen sowie Cloud-Speicher zu konfigurieren. 

Was kann PowerShell leisten? 

PowerShell bietet weitaus mehr Funktionen als CMD.exe

Im Gegensatz zu CMD.exe ist PowerShell ein objektorientiertes Tool. Objekte sind Darstellungen von Elementen wie Dateien und Verzeichnissen, die über eigene Eigenschaften und Aktionen verfügen, auf die Sie in der Befehlszeilenschnittstelle zugreifen können. PowerShell versteht alles in Windows als Objekt, lässt Sie aber auch Ihre eigenen Objekttypen erstellen.

Mit PowerShell können Administratoren auf diese Objekte mit ausgefeilteren Befehlen zugreifen, als sie in CMD.exe zu finden sind. Eine der wichtigsten Innovationen des Tools ist die Verwendung von Commandlets (CMDlets). Dabei handelt es sich um kleine Programme (bis zu einem Dutzend Codezeilen), die mithilfe der APIs von .NET bestimmte Aufgaben ausführen können. Sie können die Methoden eines Objekts ausführen, seine Attribute abfragen und ändern und Objekte als Ergebnis zurückgeben.

CMDlets liegen in einer einfachen Verb-Nomen-Form vor und ermöglichen es Ihnen, Dinge schnell zu erledigen. Wenn Sie z. B. Get-Member eingeben, erhalten Sie Informationen über ein Objekt, wie seine Eigenschaften oder Attribute.

Get-Member allein ist jedoch nicht sehr hilfreich. Sie benötigen eine Pipeline, eine weitere Funktion, die in CMD.exe nicht verfügbar war. Unix- und Linux-Benutzer nutzen Pipelines schon seit Jahrzehnten, und es ist nur ein Befehl, den PowerShell von der Bash-Shell unterstützt, die diesen Systemen gemeinsam ist.

Mit einer Pipeline können Sie die Ausgabe eines Befehls über die Pipeline an einen anderen Befehl weiterleiten, der sie als Eingabe verwendet. Sie stellen eine Pipeline mit | dar. Angenommen, Sie möchten ein Objekt in PowerShell erstellen:

$message = Write-Output 'PowerShell ist großartig'

Sie haben gerade das CMDlet Write-Output verwendet, um einen Text zuzuweisen, der in vielen Sprachen als Variable bezeichnet wird. In PowerShell handelt es sich jedoch nicht um eine Variable, sondern um ein Objekt mit eigenen Methoden und Eigenschaften. Sie können sie alle auflisten, indem Sie das $message-Objekt über die Pipeline an Get-Member übergeben: "$message | Get-Member".

Sie können viele CMDlets miteinander verbinden, um umfangreiche Befehlsketten zu erstellen, wie ein Fließband von Arbeitern, die etwas anpassen und an die nächste Person weitergeben.

Abgesehen vom Piping ist diese Art der objektorientierten Programmierung Entwicklern, die mit Sprachen wie Python arbeiten, vertraut. Sie können das Objekt sogar dazu bringen, bestimmte Informationen über sich selbst preiszugeben, indem Sie den Namen des Objekts, einen Punkt und den Namen der Eigenschaft verwenden. Zum Beispiel: $message.Length gibt 21 zurück

Sie können CMDlets selbst in einer Vielzahl von Sprachen erstellen, darunter auch Microsofts C#. Ein alternativer Ansatz zum Erstellen eigener PowerShell-Programme ist das Schreiben von Skripten, d. h. Sammlungen von PowerShell-Befehlen, die in einer Datei zusammengefasst werden, die Sie ausführen können. Obwohl cmd.exe auch Skripte zulässt, bietet PowerShell eine eigene interaktive Skripting-Umgebung (PowerShell ISE) mit einer Reihe zusätzlicher Funktionen wie Intellisense, die Ihnen während der Eingabe kontextabhängige Methoden- und Eigenschaftsoptionen anzeigt.

PowerShell bietet eine weitere Möglichkeit, die cmd.exe nicht hat: die Möglichkeit, Module zu erstellen. Dabei handelt es sich um Pakete verwandter Skripts und/oder CMDlets, die sich gegenseitig aufrufen, um eine größere Aufgabe zu erfüllen. Die gemeinsame Nutzung von vielen sich ergänzenden Skripts und CMDlets ist in einem Modul viel einfacher. Die gemeinsame Nutzung ist ein wichtiger Teil der PowerShell-Geschichte. So gibt es beispielsweise eine PowerShell-Galerie mit Tausenden von Skripts und Modulen von Entwicklern.

PowerShell wird ständig weiterentwickelt

Im Jahr 2016 wurde die PowerShell als PowerShell Core als Open Source veröffentlicht und seitdem auf Linux und macOS als Alternative zur Bash-Shell portiert. Wenn Sie PowerShell jedoch auf einem anderen System als Windows installieren möchten, müssen Sie auch .NET Core (das Open-Source-Äquivalent zu Windows .NET) auf das System bringen. Es ist auch wichtig zu bedenken, dass einige Funktionen nicht übertragen werden können - zum Beispiel wird die ISE-Skriptumgebung nicht unterstützt.

PowerShell wurde im Laufe der Jahre aktualisiert und erweitert, mit neuen Funktionen und Unterstützung für Klassen (Objekte, die als Vorlagen zum Erstellen anderer Objekte verwendet werden können) sowie Integrationen in Anwendungen wie Visual Studio Code, das sowohl für die native Windows- als auch für die Open Source-Version verfügbar ist.

Die Lernkurve mag anfangs steil erscheinen, aber es ist tatsächlich einfacher zu benutzen, als Sie vielleicht denken. Wenn Sie diese anfängliche Hürde überwinden können, werden Sie feststellen, dass PowerShell einige wirklich lohnenswerte Funktionen bietet, auch wenn Sie nicht jede einzelne davon ständig verwenden.