394 Stimmen

Ist PowerShell bereit, meine Cygwin-Shell unter Windows zu ersetzen?

Ich bin am Überlegen, ob ich PowerShell lernen soll, oder ob ich einfach bei Cygwin /Perl-Skripte/Unix-Shell-Skripte, usw.

Der Vorteil von PowerShell wäre, dass die Skripte leichter von Teamkollegen verwendet werden könnten, die nicht über Cygwin verfügen; allerdings weiß ich nicht, ob ich wirklich so viele Skripte für allgemeine Zwecke schreiben würde, oder ob die Leute sie überhaupt verwenden würden.

Die Unix-Skripterstellung ist so leistungsstark, kommt PowerShell dem nahe genug, um einen Wechsel zu rechtfertigen?

Hier sind einige der spezifischen Dinge (oder Entsprechungen), nach denen ich in PowerShell suchen würde:

  • grep
  • sortieren
  • uniq
  • Perl (wie nah kommt PowerShell an die Fähigkeiten von Perl heran?)
  • AWK
  • sed
  • file (der Befehl, der Dateiinformationen liefert)
  • usw.

800voto

Jeffrey Snover - MSFT Punkte 9975

Werkzeuge sind nur Werkzeuge.
Sie helfen oder sie helfen nicht.
Entweder Sie brauchen Hilfe oder Sie brauchen sie nicht.

Wenn Sie sich mit Unix auskennen und diese Tools das tun, was Sie unter Windows brauchen, dann sind Sie ein glücklicher Mensch und brauchen PowerShell nicht zu lernen (es sei denn, Sie wollen es erforschen).

Meine ursprüngliche Absicht war es, eine Reihe von Unix-Tools in Windows einzubinden und damit fertig zu werden (einige von uns im Team haben einen tiefen Unix-Hintergrund und eine gesunde Dosis Respekt für diese Gemeinschaft).

Ich habe festgestellt, dass dies nicht wirklich viel geholfen hat. Der Grund dafür ist, dass AWK/grep/sed nicht gegen COM , WMI , ADSI , die Registry, den Zertifikatspeicher usw., usw.

Mit anderen Worten: UNIX ist ein ganzes Ökosystem, das auf Textdateien abgestimmt ist. Die Textverarbeitungsprogramme sind daher eigentlich Verwaltungsprogramme. Windows ist ein völlig anderes Ökosystem, das sich um APIs und Objekte dreht. Aus diesem Grund haben wir PowerShell erfunden.

Ich denke, Sie werden feststellen, dass es viele Gelegenheiten gibt, bei denen Sie mit der Textverarbeitung unter Windows nicht das bekommen, was Sie wollen. An diesem Punkt werden Sie sich für PowerShell entscheiden. HINWEIS - es geht nicht um alles oder nichts. Innerhalb von PowerShell können Sie Ihre Unix-Tools aufrufen (und deren Textverarbeitung oder die Textverarbeitung von PowerShell verwenden). Außerdem können Sie PowerShell von Ihren Unix-Tools aus aufrufen und Text abrufen.

Auch hier gibt es keine Religion - unser Schwerpunkt liegt darauf, Ihnen die Werkzeuge an die Hand zu geben, die Sie für Ihren Erfolg benötigen. Deshalb ist uns das Feedback so wichtig. Lassen Sie uns wissen, wo wir bei der Arbeit versagen oder wo Sie ein Werkzeug nicht haben, das Sie brauchen, und wir werden es auf die Liste setzen und uns darum kümmern.

Um ehrlich zu sein, wir graben uns gerade aus einem 30 Jahre alten Loch heraus, es wird also eine Weile dauern. Dennoch, wenn Sie die Beta-Version von Windows Server 2008 /R2 und/oder den Betas unserer Serverprodukte, werden Sie schockiert sein, wie schnell diese Lücke geschlossen wird.

Was die Nutzung anbelangt, so haben wir bis heute mehr als 3,5 Millionen Downloads verzeichnet. Darin nicht enthalten sind die Nutzer, die es in Windows Server 2008 verwenden, da es als optionale Komponente enthalten ist und nicht heruntergeladen werden muss.

V2 wird in allen Versionen von Windows ausgeliefert. Sie wird standardmäßig für alle Editionen aktiviert sein, außer für Server Core, wo sie eine optionale Komponente ist. Kurz nach der Auslieferung von Windows 7/Windows Server 2008 R2 werden wir V2 auf allen Plattformen ab Windows XP verfügbar machen. Mit anderen Worten: Ihre Investition in das Lernen wird für eine sehr große Anzahl von Maschinen/Umgebungen anwendbar sein.

Eine letzte Bemerkung. Wenn Sie anfangen, PowerShell zu lernen, werden Sie ziemlich zufrieden sein. Ein großer Teil des Designs ist stark von unserem Unix-Hintergrund beeinflusst, und obwohl wir sehr unterschiedlich sind, werden Sie es sehr schnell lernen (nachdem Sie sich damit abgefunden haben, dass es kein Unix ist :-) ).

Wir wissen, dass die Menschen nur ein sehr begrenztes Budget für das Lernen zur Verfügung haben - deshalb legen wir größten Wert auf Konsistenz. Sie werden etwas lernen, und dann werden Sie es immer und immer und immer wieder anwenden.

Experimentieren! Genießen! Engagiere dich!

125voto

Richard Punkte 103159

grep

Select-String Cmdlet und -match Operator mit Regexen arbeiten. Sie können auch direkt die Regex-Unterstützung von .NET für erweiterte Funktionen nutzen.

sortieren

Sort-Object ist leistungsfähiger (als ich mich an die *nix-Version von sort ). Ermöglicht die mehrstufige Sortierung beliebiger Ausdrücke. Hier hilft die PowerShell-Wartung des zugrunde liegenden Typs; z. B. ein DateTime Eigenschaft wird als DateTime ohne für die Formatierung in ein sortierbares Format sorgen zu müssen.

uniq

Select-Object -Unique

Perl (wie nahe kommt PowerShell den Perl-Fähigkeiten?)

Was die Breite der Perl-Bibliotheken zur domänenspezifischen Unterstützung angeht: (noch) nicht annähernd.

Für die allgemeine Programmierung ist PowerShell sicherlich kohärenter und konsistenter und lässt sich leichter erweitern. Die einzige Lücke für Text-Munging ist etwas, das Perl's .. Betreiber.

AWK

Es ist lange genug her, dass ich AWK benutzt habe (muss >18 Jahre sein, da ich später nur noch Perl benutzt habe), daher kann ich nicht wirklich etwas dazu sagen.

sed

[Siehe oben]

file (der Befehl, der Dateiinformationen liefert)

Die Stärke von PowerShell liegt hier nicht so sehr darin, was sie mit Dateisystemobjekten tun kann (und hier erhält sie umfassende Informationen), dir gibt zurück. FileInfo o FolderInfo Objekte) ist das gesamte Anbietermodell.

Sie können die Registrierung, den Zertifikatsspeicher, SQL Server, den RSS-Cache des Internet Explorers usw. als einen Objektraum behandeln, der mit denselben Cmdlets wie das Dateisystem navigiert werden kann.


PowerShell ist definitiv der Weg in die Zukunft unter Windows. Microsoft hat es zu einem Teil seiner Anforderungen für zukünftige Nicht-Home-Produkte gemacht. Daher die umfangreiche Unterstützung in Exchange, die Unterstützung in SQL Server. Dies wird sich nur noch ausweiten.

Ein aktuelles Beispiel dafür sind die TFS PowerToys. Viele Operationen des TFS-Clients werden durchgeführt, ohne dass tf.exe jedes Mal neu gestartet werden muss (was eine neue TFS-Serververbindung usw. erfordert), und es ist deutlich einfacher, die Daten weiter zu verarbeiten. Außerdem ermöglicht es einen weitreichenden Zugriff auf die gesamte TFS-Client-API, der detaillierter ist als im Team Explorer oder in TF.exe.

59voto

Ubiguchi Punkte 3056

Als jemand, dessen berufliche Laufbahn sich von 1997 bis 2010 auf die Windows-Unternehmensentwicklung konzentrierte, wäre die offensichtliche Antwort PowerShell, und zwar aus all den guten Gründen, die bereits genannt wurden (z. B. ist sie Teil der Unternehmensstrategie von Microsoft; sie lässt sich gut in Windows/COM/.NET integrieren; und die Verwendung von Objekten anstelle von Dateien sorgt für ein "reichhaltigeres" Codierungsmodell). Aus diesem Grund habe ich PowerShell in den letzten zwei Jahren verwendet und gefördert, in dem ausdrücklichen Glauben, dass ich dem "Wort von Bill" folge.

Als Pragmatiker bin ich mir jedoch nicht mehr sicher, ob PowerShell eine so gute Lösung ist. Es ist zwar ein hervorragendes Windows-Tool und ein dringend benötigter Schritt, um die historische Lücke in der Windows-Befehlszeile zu schließen, aber da wir alle beobachten, wie Microsofts Einfluss auf das Consumer-Computing nachlässt, scheint es immer wahrscheinlicher, dass Microsoft einen gewaltigen Kampf vor sich hat, um sein Betriebssystem als wichtig für das Unternehmen der Zukunft zu erhalten.

Da ich zunehmend in heterogenen Umgebungen arbeite, finde ich die Verwendung von Bash-Skripten im Moment sehr viel nützlicher, da sie nicht nur unter Linux, Solaris und Mac OS X, sondern auch - mit Hilfe von Cygwin - unter Windows funktionieren.

Wenn Sie also der Überzeugung sind, dass die Zukunft des Betriebssystems eher in der Kommerzialisierung als in der Monopolisierung liegt, dann scheint es sinnvoll zu sein, sich für eine Strategie der agilen Entwicklungswerkzeuge zu entscheiden, die sich von proprietären Werkzeugen fernhält, wo dies möglich ist. Wenn Sie jedoch der Meinung sind, dass Ihre Zukunft von "All That Is Redmond" dominiert wird, dann sollten Sie sich für PowerShell entscheiden.

35voto

Daishiman Punkte 804

Ich habe ein wenig PowerShell für die Skriptautomatisierung verwendet. Es ist zwar sehr schön, dass die Umgebung viel besser durchdacht zu sein scheint als Unix-Shells, aber in der Praxis ist die Verwendung von Objekten anstelle von Textströmen viel klobiger, und viele der Unix-Funktionen, die in den letzten 30 Jahren entwickelt wurden, fehlen noch.

Cygwin ist nach wie vor meine bevorzugte Skripting-Umgebung für Windows-Hosts. Es ist sicherlich besser als die Alternativen, wenn es darum geht, Dinge zu erledigen.

15voto

Vic Punkte 1905

Es gibt hier viele großartige Antworten, und hier ist meine Meinung dazu. PowerShell ist bereit, wenn Sie... Beispiele:

grep = " Select-String -Pattern "

sortieren = "Sortier-Objekt"

uniq = " Einzigartig werden "

file = " Get-Item "

cat = " Get-Content "

Perl/AWK/Sed sind keine Befehle, sondern Dienstprogramme und daher schwer zu vergleichen, aber man kann fast alles in PowerShell machen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X