Der Inside-Out-Sicherheits Blog - Der Inside-Out-Sicherheits Blog

Der Unterschied zwischen Bash und Powershell

Geschrieben von Michael Buckbee | Sep 19, 2017 11:21:00 AM

Üblicherweise spricht man bei der Betrachtung von Bash und Powershell nicht über Philosophie und IT. Aber wenn ich eine Sache in den letzten 20 Jahren als Systemadministrator gelernt habe, ist es, dass jeder – sei er Empiriker, Nihilist oder junger Hegelianer -, der es in diesem Job ernst meint, seinen Tag nicht mit Anklicken von Schaltflächen verbringt, sondern sein Netzwerk über die Kommandozeile steuert.

Ich bringe das zur Sprache, weil jeder zunächst einmal schreibt, dass PowerShell und Unix-Shells einer „anderen Philosophie“ folgen. Letztlich läuft es darauf hinaus, dass PowerShell strukturierte Daten hin und her schiebt. Unix-Shells schieben Textbrocken herum.

Ein Beispiel: Liste die Daten im aktuellen Verzeichnis auf:

Mit PowerShell:

PS C:temp\> ls


Mit Bash:

/temp/ls

Was Sie da oben sehen, sieht vielleicht einfach wie eine Liste von Dateien aus, aber beide sind eine Übung in der Ausübung von Verantwortung. Wer ist dafür veranwortlich, wie die Ausgabe strukturiert wird? Die Philosophie von PowerShell ist: „Das machen wir für Dich!“ PowerShell gibt die Dateien als eine Serie von Objekten aus, die Dateiobjekte sind – die Objekte haben Eigenschaften wie Größe, Erstellungsdatum usw.

Bash folgt der Philosophie, dass Sie – der Systemadministrator – allmächtig sind und selbst entscheiden können, was Sie mit diesem Zeichenfolgensatz (der in diesem Fall eine textförmige Darstellung von Dateinamen ist) anfangen möchten.

Beide Ansätze stehen im Gegensatz zu der dritten (und traurigerweise immer noch viel zu weit verbreiteten) Philosophie, die lautet: „Ich werden nichts von beiden lernen und stattdessen einfach den Ordner mit einem Doppelklick öffnen, um zu sehen, was drin ist.“

Shell-Skripte zu schreiben ist so, als würde man etwas aus Lego bauen (oder dem architektonischen System Ihrer Wahl mit ineinander greifenden Steinen). Ein Steinchen ist nicht besonders viel, aber wenn Sie genug davon zusammenfügen, haben Sie plötzlich eine Miniatur des Mount Rushmore im Keller.

Deshalb ist der anscheinend so triviale Punkt, ob Ihnen Objekte oder eine Textmenge ausgegeben wird, so wichtig. Nicht, weil es Sie wirklich kümmert, was Sie als Endergebnis bekommen, sondern weil alles, was man beim Skripten tut, auf den Daten aufbaut, die ausgegeben werden. Es ist weniger ein „Skript“, sondern eher ein Datentransformationskanal, der aus einer Reihe kleinerer Skripte besteht, die Daten herumreichen.

Bash-Befehl PowerShell-Befehl Anmerkungen
= != -eq -ne -ceq -cne Vergleicht kurze Textschnipsel wie Datei- oder Benutzernamen miteinander.
grep select-string Findet zu einem Muster passende Zeilen.
sed -replace Ersetzt eine Zeichenfolge.
echo Write-Host Gibt den Wert auf dem Bildschirm aus (praktisch für die Fehlerbeseitigung)
var=3 $var = 3 Erzeugt eine Variable für $var.

Quelle: http://cecs.wright.edu/~pmateti/Courses/233/Top/index.html