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.

0voto

TMN Punkte 3032

Ich fand, dass die PowerShell-Programmierung den Aufwand nicht wert ist.

Ich habe mehrere Jahre Erfahrung mit Shell-Skripten unter Unix, aber ich fand es enorm schwierig, mit PowerShell viel zu tun.

Bei vielen Funktionen müssen Sie die Windows-Verwaltungsoberfläche abfragen und SQL-ähnliche Befehle eingeben, um die benötigten Informationen zu erhalten.

Ich wollte zum Beispiel ein Skript schreiben, um alle Dateien mit einem bestimmten Suffix aus einem Verzeichnisbaum entfernen. Unter Unix wäre dies eine einfache ...

find . -name \*.xyz -exec rm {} \;

Nach ein paar Stunden Herumspielen mit Scripting.FileSystemObject y WScript.Shell und der Eingabe von "SELECT * FROM Win32_ShortcutFile WHERE Drive = '" & drive & "' AND Path = '" & searchFolder & "'" gab ich schließlich auf und entschied mich für die Windows Explorer-Funktion Suche und machen Sie es einfach manuell. Es gibt wahrscheinlich eine Möglichkeit, das zu tun, was ich wollte, aber ich habe nichts Offensichtliches gesehen und alle Beispiele auf der MSDN-Website waren so trivial, dass sie wertlos waren.

EDIT Nachdem ich das geschrieben hatte, stöberte ich natürlich noch ein bisschen herum und fand, was ich vermisst hatte: die -recurse Option des remove-item-Befehls fehlerhaft ist (offenbart, wenn Sie get-help remove-item -detailed ).

Ich hatte es mit "remove-item -filter '* .xyz' -recurse" versucht und es hat nicht funktioniert, also habe ich es aufgegeben.

Es hat sich herausgestellt, dass Sie Folgendes verwenden müssen get-childitem -filter '*.xyz' -recurse | remove-item

0voto

Erik Funkenbusch Punkte 91649

PowerShell ist sehr leistungsfähig, leistungsfähiger als die Standard-Built-Ins der Unix-Shells (aber nur, weil sie einen Großteil der Funktionen enthält, die normalerweise in Unterprogramme ausgelagert werden). Bedenken Sie auch, dass Sie Applets in jeder .NET-Sprache schreiben können, einschließlich IronPython , IronRuby , PerlNet, etc.. oder Sie können einfach Ihre Cygwin-Befehle von PowerShell aus aufrufen, ohne die zusätzlichen Funktionen zu beachten, und es wird ähnlich wie Bash funktionieren, KornShell oder was auch immer...

0voto

skanga Punkte 341

Sie können auch versuchen, Bash-Skripte unter Windows mit BashWin auszuführen https://github.com/skanga/BashWin .

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