Dmitry Nikolaev - stock.adobe.co

Die Kommandozeilen PowerShell und Bash im Vergleich

Für Windows-Administratoren stellt sich die Frage, ob Bash, die Linux-Shell, das Kommandozeilen-Tool PowerShell für Windows-Bereitstellungen ersetzen kann.

2016 wurde die Bourne Again Shell (Bash) durch eine Zusammenarbeit von Microsoft mit Linux-Anbieter Canonical Ltd. auf Windows portiert. Auf Dual-Boot mit Ubuntu-Systemen können Nutzer jetzt auf Canonical verzichten, aber trotzdem native Linux-Funktionen nutzen.

Skripterfahrene Windows-Administratoren fragen sich vielleicht, ob Bash in der Lage ist, PowerShell auf Windows zu ersetzen, ob die Unix- und Linux-Systeme ähnelt und außerdem bereits OpenSSH-Konnektivität über das Secure-Shell-Protokoll bietet.

Was ist Windows PowerShell?

PowerShell lässt sich am besten als die Befehlszeilenschnittstelle von Microsoft beschreiben. Vor dem Aufkommen der grafischen Benutzeroberfläche in den 1980er Jahren war das PC-Betriebssystem von Microsoft vollständig komanndozeilenbasiert. Dieses Betriebssystem, das als Disk Operating System (DOS) bekannt war, ist nie ganz verschwunden. Die frühen Windows-Versionen waren kaum mehr als grafische Plattformen, die auf DOS aufsetzten. Nachfolgende Betriebssysteme von Microsoft, einschließlich Windows 10 und 11, benötigen kein DOS mehr, sondern emulieren DOS über die Windows-Eingabeaufforderung.

Obwohl Microsoft im Laufe der Jahre verschiedene Aktualisierungen an der Windows-Eingabeaufforderung vorgenommen hat, handelt es sich im Wesentlichen immer noch um eine moderne Darstellung einer mehr als 40 Jahre alten Befehlszeilenumgebung. Als solche ist die Windows-Eingabeaufforderung in ihren Möglichkeiten recht begrenzt.

An dieser Stelle kommt PowerShell ins Spiel. Wie die Windows-Eingabeaufforderung ist auch PowerShell eine in die Windows-Umgebung integrierte Befehlszeilenumgebung. Es gibt auch plattformübergreifende Versionen von PowerShell, die mit Linux und macOS kompatibel sind.

PowerShell funktioniert sowohl als Verwaltungs-Tool als auch als vollwertige Skriptsprache. Theoretisch können Sie mit PowerShell sogar ganze Anwendungen schreiben. Viel häufiger dient es jedoch der Automatisierung. Administratoren verwenden Windows PowerShell in der Regel, um verschiedene Verwaltungsaufgaben zu automatisieren.

Es gibt viele tausend integrierte PowerShell-Befehle und durch Module erhalten Sie weitere hinzu. Einige dieser Module sind kommerziell, andere sind Open Source. Es ist auch relativ einfach, Ihre eigenen Module zu erstellen.

PowerShell Cmdlets folgen einer Standardsyntax und bestehen aus einem Verb, gefolgt von einem Bindestrich und einem Substantiv, wie zum Beispiel Get-Help. Die PowerShell-Umgebung unterstützt viele der alten DOS-Befehle, dabei handelt es sich jedoch um alternative Bezeichnungen für moderne PowerShell-Cmdlets. Der Befehl dir zum Beispiel ist ein Alias für das PowerShell-Cmdlet Get-ChildItem, das ähnlich wie der DOS-Befehl dir funktioniert.

Was ist Bash?

Wie PowerShell ist auch Bash eine Befehlszeilenumgebung, über die Sie mit einem Betriebssystem interagieren. Bash weist viele Ähnlichkeiten mit PowerShell auf und dient wie PowerShell als Verwaltungs-Tool oder als Skriptsprache.

Bash ist ursprünglich für den Einsatz in Linux-Umgebungen gedacht. In den letzten Jahren hat die Bash jedoch auch in Windows-Umgebungen schnell an Bedeutung gewonnen. Das ist zum großen Teil auf das Windows Subsystem für Linux (WSL) zurückzuführen.

WSL macht es möglich, mehrere Linux-Distributionen auf Windows-Rechnern zu installieren. Es ist sogar möglich, eine Linux-Shell vom Datei-Explorer aus zu starten. In der Vergangenheit installierten Administratoren Cygwin Bash, um die Shell innerhalb von Windows zu verwenden, aber das bot weder eine native Bash-Erfahrung noch eine angemessene Integration mit Windows.

Dank WSL ist es möglich, eine echte Linux-Shell unter Windows auszuführen. Das bedeutet, dass Sie die Bash-Shell verwenden, um mit Linux auf die gleiche Weise zu interagieren wie auf einem nativen Linux-Rechner, ohne Cygwin Bash installieren zu müssen.

Vergleich von Bash und PowerShell

Zwischen PowerShell und Bash gibt es einige Unterschiede.

Zweck und Umfang

PowerShell wird in der Regel als Konfigurationsmanagement-Tool betrachtet, das die Möglichkeiten der Linux-CLI-Steuerung in die historische Point-and-Click-Windows-Umgebung bringt, obwohl PowerShell auch für komplexe Skripting-Aufgaben geeignet ist. PowerShell wird am häufigsten für die Verwaltung von Windows-Umgebungen im großen Maßstab verwendet, insbesondere in virtualisierten Umgebungen.

Bash hingegen ist traditionell eher für Entwicklungsumgebungen geeignet. Sie wurde eingeführt, um die CLI-basierte Interaktion zu ergänzen und zu stärken. Dank Bash für Windows funktioniert der Code, den Entwickler oder Infrastrukturingenieure für Linux schreiben, auch auf ihren Windows-Systemen. Stellen Sie sich vor, dass die in DevOps-Teams üblichen Linux-first Tools – Python, Ruby, Git – direkt unter Windows laufen.

Syntax

PowerShell ist nicht nur eine Shell, sondern eine vollständige Skripting-Umgebung. PowerShell ruft leichtgewichtige Befehle, sogenannte Cmdlets, zur Laufzeit auf. Darüber hinaus ist PowerShell in der Lage, externe Komponenten wie die Windows Management Instrumentation (WMI) und das .NET Framework zu verwenden. Das bedeutet, dass PowerShell-Skripte nicht durch die nativen PowerShell-Cmdlets eingeschränkt sind. Obwohl PowerShell eine Befehlszeilenumgebung ist, erstellen Sie eine GUI-Oberfläche für ein PowerShell-Skript, indem Sie Aufrufe an .NET machen.

Die Befehle ls -la in der Bash und dir in der PowerShell sind zwei verschiedene CLI-Konzepte mit der fast gleichen Ausgabe. Abbildung 1 zeigt die Ausgabe von PowerShell-dir-Befehlen und wie die Ausgabe eine Verzeichnisliste in PowerShell anzeigt.

Ausgabe von dir
Abbildung 1: So sieht die Ausgabe von dir in der PowerShell aus.

In Gegensatz dazu besteht die Bash-Ausgabe in Abbildung 2 aus einer Reihe von Strings, das heißt den Textdarstellungen der Dateinamen. Das Endergebnis ist besonders wichtig: Die Skripte, die Sie schreiben, nehmen die zurückgegebenen Daten und leiten sie an eine andere Funktion weiter oder verwenden sie für eine einzige Aktion.

ls -la in Bash
Abbildung 2: Das ist die Ausgabe von ls -la in Bash.

PowerShell stützt sich auf eine Objekt-Pipeline. PowerShell-Cmdlets können so miteinander verbunden werden, dass die Ausgabe eines Cmdlets als Eingabe für das nächste dient. Auf diese Weise wenden Sie mehrere Cmdlets auf dieselben Daten an. Durch das Piping von Objekten nutzen PowerShell-Skripte komplexe Daten gemeinsam und geben ganze Datenstrukturen zwischen Befehlen weiter. Die Bash hingegen übergibt Ausgaben und Eingaben als reinen Text, was bedeutet, dass es für den Benutzer einfach ist, Informationen an das nächste Programm zu übergeben.

Die PowerShell-Ausgabe in Abbildung 3 zeigt, wie ein Verzeichniseintrag eine Fülle von Eigenschaften enthält. Verwenden Sie den Befehl Get-ChildItem | Select-Object *-First 1, um die vielen verfügbaren Eigenschaften für ein einzelnes Dateisystemobjekt anzuzeigen.

Get-ChildItem | Select-Object *-First 1
Abbildung 3: Das ist der Output des Befehls Get-ChildItem | Select-Object *-First 1.

Fähigkeiten

Mit PowerShell bearbeiten Administratoren die Registry, Microsoft-Azure- oder Microsoft-365-Cloud-Umgebungen und führen Windows Management Instrumentation durch. Die Shell- und Befehlssprache Bash bietet diese Funktionen in Windows nicht. Mit Bash als Entwickler-Tool unter Windows programmieren und erstellen Benutzer jedoch Funktionen oder Dienste, während sie an denselben Dateien sowohl von der Linux- als auch von der Windows-Befehlszeile aus arbeiten.

PowerShell erleichtert den Zugriff auf die Windows Registry und ermöglicht es Ihnen sogar, dort auf die gleiche Weise zu navigieren wie in einem Dateisystem. Auch die XML-Verarbeitung in PowerShell ist unkompliziert.

Der Wert auf PowerShell gegenüber Bash hängt vom Benutzer ab. Wenn Sie auf mehreren Windows-Systemen arbeiten, ist Bash nur von geringem Nutzen. Sie benötigen PowerShell, um Skripte zu schreiben. Administratoren können mit Windows-Anwendungen – wie zum Beispiel Windows Notepad – nicht über Bash auf lokale Linux-Dateien zugreifen.

Bash eignet sich zwar hervorragend zum Verwalten von Textdateien in einer Skripting-Umgebung, aber alles wird über APIs verwaltet, nicht über Dateien. Bash ist also in erster Linie nützlich, um Linux-Code in Windows-Rechner zu importieren und diesen Code zu entwickeln.

Umgekehrt ist PowerShell die beste Wahl zum Verwalten von Windows-Workloads. Neben der Fähigkeit von PowerShell, .NET und WMI zu verwenden, gibt es auch viele Zusatzmodule, die die Funktionalität des Tools erweitern, um Windows-zentrierte Aufgaben in Active Directory, Exchange Server und anderen Umgebungen zu verwalten.

Es ist erwähnenswert, dass PowerShell nicht exklusiv für Microsoft ist. PowerShell kann zum Beispiel Ressourcen in AWS verwalten. Auch VMware ist mit PowerShell kompatibel.

Letztendlich ist PowerShell jedoch weit mehr als nur ein Verwaltungs-Tool. Es ist eine extrem leistungsfähige Skriptsprache. Die PowerShell-Befehlszeilenschnittstelle verfügt über gute Tracing- und Debugging Tools und es gibt mehrere integrierte Entwicklungsumgebungen zum Programmieren und Testen von PowerShell-Skripten.

PowerShell- und Bash-Befehle im Vergleich
Abbildung 4: Das ist ein Vergleich von gängigen PowerShell- und Bash-Befehlen.

Früher war PowerShell auf Linux mit Bash nicht im Ansatz vergleichbar. Bash verfügt über ein Ökosystem von Tools, die von Grund auf für Linux entwickelt wurden. Mit PowerShell Core und späteren PowerShell-Versionen hat sich das jedoch geändert. PowerShell kann als primäre Shell unter Linux ausgeführt werden, die alle Objekteigenschaften enthält, für die PowerShell berühmt ist.

Wie Sie PowerShell und Bash lernen

PowerShell befasst sich mit einer Menge Skripten. Wenn Sie von einem Unix- und Linux-Hintergrund kommen, kommt Ihnen dieses Tool bekannt vor. Für die Anhänger der Windows-GUI ist PowerShell jedoch nicht ganz leicht zu erlernen. Es enthält Hunderte von Cmdlets, jedes mit einer Vielzahl von Parametern und der einzigartigen Fähigkeit, auf verschiedenen Betriebssystemen zu laufen.

Bash unter Windows verfügt über weniger als 40 interne Funktionen und etwa 100 Hilfsprogramme. Mit einer schlankeren Syntax ist Bash schneller, doch PowerShell hat den Vorteil einer konsistenten Syntaxstruktur. Wenn Sie gerade erst anfangen, wird es einige Zeit dauern, bis Sie die Möglichkeiten der PowerShell voll ausschöpfen können. Benutzer, die mit dem Tool vertraut sind, sind in der Lage, hunderte von Systemen von einem beliebigen Remote-Standort aus bereitzustellen, zu verwalten und reparieren, Runbooks zu automatisieren und C#-basierte PowerShell-Skriptdateien zu verwenden, um sich wiederholende Aufgaben zu automatisieren.

Erfahren Sie mehr über Serverbetriebssysteme