Ist Windows PowerShell so leistungsstark wie das Terminal von Unix / Linux? [geschlossen]

44

Ist Windows PowerShell so leistungsstark und effizient wie Linux terminal?

Leute, die offline sind, erzählen mir, ohne viel zu erklären, dass Windows PowerShell ein Versuch ist, Unix-Administratoren das Gefühl zu geben, mit Windows besser zurechtzukommen. Aber ich denke, sie werden sich nur wohlfühlen, wenn sie (oder fast) die gleiche Effizienz haben.

Kern
quelle
3
Das ist schwer zu beantworten, da es DIESE Linux-Shell nicht gibt. Es gibt viele Shells, die häufig unter Linux (oder allgemein auf * nix-Systemen) verwendet werden. Die am häufigsten verwendete ist bash, deshalb möchten Sie vielleicht danach fragen. <br> Auch "mächtig" ist sehr meinungsbasiert.
Kritzefitz
7
People offline tell me ... that Windows Powershell is an attempt to make UNIX administrators feel more comfortable using Windows.Diese Leute haben weder Unix noch Powershell benutzt.
Surfasb
Ich würde sagen, dass PowerShell eine Bestätigung einiger Microsoft-Bereiche ist, dass sie durch das Fehlen einer leistungsstarken Shell durcheinander gebracht wurden. Es kopiert jedoch überhaupt nicht den UNIX-Stil. Um PS zu kennen, sollten Sie sich ein wenig mit der Funktionsweise von Windows und der Funktionsweise von .NET vertraut machen.
Julian Knight
Microsoft verfügte übrigens über eine BASH-Shell, die Teil eines Migrations-Toolkits war, mit dem Benutzer von UNIX auf Windows Server umsteigen können.
Julian Knight
1
Ich bin ein langjähriger Unix-Fan, der Unix in den meisten Belangen Windows vorzieht. PowerShell schlägt Bash Hands Down, da Objekte mit Schlüssel / Wert-Paaren und nicht reinem Text weitergeleitet werden. Dies macht es jQuery im Design ähnlicher als bash.
Mario

Antworten:

55

Nun, Ihr erstes Problem ist, dass Sie eine Shell (PowerShell) mit einem Terminal vergleichen. Unter Linux sendet und empfängt ein Terminal zeichenbasierte E / A und es wird angenommen, dass sich ein interaktiver Benutzer dahinter befindet (mit anderen Worten, es ist die GUI-Anwendung, die zum Enthalten einer Shell verwendet wird). Eine der am häufigsten verwendeten Shells im Ubuntu-Terminal ist Bash , aber es gibt auch andere.

Leute, die offline sind, erzählen mir, ohne viel zu erklären, dass Windows PowerShell ein Versuch ist, Unix-Administratoren das Gefühl zu geben, mit Windows besser zurechtzukommen.

Richtig ist, dass PowerShell Windows einen Großteil des WMI- , COM- und .NET- Objektmodells in einer interaktiven und skriptfähigen Befehlszeilenumgebung verfügbar macht - und dass diese Befehlszeilenumgebung weiterhin viele Konzepte wie Pipelines ausleiht und I / O-Umleitung - von Unix-Shells, genau wie das alte DOS (2.0 und höher) command.comund cmd.exe. Pipelines arbeiten mit Objekten in PowerShell. Sie können HTML und möglicherweise Excel- Tabellen direkt erstellen , wenn Sie genug wissen. Es ist sicherlich ein Upgrade / Ersatz von der alten cmd.exeShell, die sich gegenüber Windows NT 4.0 nicht wesentlich verändert hat .

In Bezug auf die Syntax /ähneln sie weniger den Unix-Shells (obwohl letztendlich keines der Cmdlets als Schalter oder Parameterindikator verwendet wird), aber es gibt viele Aliase für klassische Unix-Befehle - wie die Eingabe lsin ein PowerShell-Fenster dir. Dies sind aber nur Aliase ("Get-Alias" listet diese auf?).

In Bezug auf die Funktionen von PowerShell verfügten Sie tatsächlich über ähnliche Funktionen, die nur über Skripte von VBScript und CScript verfügten - obwohl beide älter sind als .NET.

Eine Sache, die Unix-Leute bei der Verwendung von Bash meistens nicht tun müssen, ist, sich mit dem möglicherweise sehr ausgeklügelten Objektmodell eines Programmierers oder Objekts vertraut zu machen, das für viele fortgeschrittene und einfache PowerShell-Aufgaben erforderlich ist. Dies ist jedoch nur möglich, weil es für viele POSIX- Standardbefehle eine eindeutige Konvention für die Ausgabe von direktem Text gibt . Windows hatte diese Tradition nicht - anscheinend bevorzugen Sie die Verwendung einer mmcKonsole für Administrationsaufgaben, mit Befehlen, die im Laufe der Jahre hier und da hinzugefügt wurden. Viele bekannte Unix - Utilities sind komplex und erfordern eine Studie vor dem Gebrauch Darüber hinaus - rsync, wgetund viele andere. Effizienz hängt wahrscheinlich mehr als alles andere davon ab, wie gut man das verwendete Werkzeug kennt.

LawrenceC
quelle
8
+1 für die Erwähnung, dass PowerShell .NET für die Konsole und als Skript-Host verfügbar macht. Es zeigt die Leistungsfähigkeit vieler wichtiger Windows-Bibliotheken, die für die Skripterstellung verwendet werden können. Die Anwendungsfälle zwischen den beiden können ähnlich sein, der Stil ist völlig unterschiedlich.
Julian Knight
3
+1 für die Erwähnung, dass ein Terminal eine Shell enthält. Ich habe lange Zeit Windows und Linux verwendet, aber noch nie hatte jemand den Unterschied so deutlich festgestellt.
Tyler Collier
25

Windows PowerShell und Unix-Shell sind zwei verschiedene Dinge, die beide Vorteile haben.

Unix (Shell) hat die Philosophie, dass alles eine Datei ist. Auf die Ein- und Ausgabe eines Unix-Befehls kann wie auf eine Datei zugegriffen werden. Dies macht das Verketten von Befehlen wirklich einfach und die Wiederverwendung der Ausgabe eines Befehls durch einen anderen ist die Stärke der Unix-Shell.

Soweit ich weiß, ist mit Windows PowerShell alles ein Objekt. Sie können das Ergebnis eines Befehls als Objekt an einen anderen übergeben. Dies kann sehr mächtig sein, hat aber nicht das einfache Konzept von Unix.

Ich glaube nicht, dass PowerShell so effizient ist wie eine Unix-Shell, aber andere glauben, dass es so ist.

Der Vergleich ist jedoch umstritten, da Windows kein * nix-System ist und daher keine * nix-Konzepte gelten. Im Vergleich zu MS-DOS ist PowerShell eine große Verbesserung.

Biotherapie
quelle
4
Alles was eine Datei ist hat nichts mit der Shell zu tun, es ist eine Kernelsache.
Terdon
3
Stimmt, aber es wirkt sich auf das Design der Unix-Shell aus.
Biapy
@terdon: Das stimmt, aber die Shell funktioniert gut damit. Weil es immer noch die Shell , die Symbole wie erkennt |, <oder >.
Kritzefitz
1
Die Leute reden immer wieder in Powershell über diese Objekte. Können Sie etwas näher darauf eingehen, wenn Sie nur an cmd.exe und bash (oder andere Shells) gewöhnt sind, vielleicht mit einem einfachen Beispiel?
Luc
5
Ohne Sie von dieser Seite zu entfernen - wenn Sie Dinge in * nix-Systemen auf der rechten Seite der Pipe weiterleiten, erwarten Sie einfachen Text, zum Beispiel --- history | grep cp --- gibt nur Zeilen zurück, die cp enthalten. Auf der anderen Seite erhalten Sie beim Pipelining von Dingen in PS auf der rechten Seite ein Objekt mit folgenden Eigenschaften: --- Get-History | Where-Object {$ _. CommandLine -eq "cp"} --- $ _ ist jedes Objekt, CommandLine ist die Eigenschaft, -eq ist gleich und schließlich der String cp.
Unbekannter