Warum „Cmd /c Powershell“ statt nur „Powershell“ verwenden?

Warum „Cmd /c Powershell“ statt nur „Powershell“ verwenden?

Ich habe mein erstes Kontextmenü über die Registrierung hinzugefügt, gemäß den Anweisungen indiese Frage(juchhu, ich).

Als auszuführenden Befehl habe ich ursprünglich Folgendes verwendet, also den Wert der Taste „Befehl“:

Cmd /C Powershell  "imageSeqView --% \"%1\""

ImageSeqViewist der Name meiner Powershell-Funktion, ich importiere sie in mein Powershell-Profil. Es funktioniert gut, aber ich frage mich: Warum muss ich zum Ausführen der Funktion cmdto open verwenden Powershell? Wäre es nicht einfacher, einfach

Powershell  "imageSeqView --% \"%1\""

Dieser Befehl scheint einwandfrei zu funktionieren, aber da seine Verwendung kanonisch erscheint, cmdfrage ich mich, ob damit heimlich Welpen getötet werden oder so etwas?

Bildbeschreibung hier eingeben

Antwort1

Dafür gibt es keinen guten Grund. Tatsächlich ist der einzige wirkliche Effekt, dass die Dinge langsamer werden.

Manche Leute denken vielleicht, dass es dafür einen guten Grund gibt. Die Verwendung von CMD hat die folgenden Effekte, die in manchen Fällen durchaus sinnvoll sein können:

  • Aktiviert interne Befehle, wie " DIR"
  • Legt Umgebungsvariablen fest, wie etwa die Variable PATH

In diesem Fall wird jedoch keiner dieser Vorteile erreicht. Schauen wir uns beide Szenarien an:

Daher kann es in manchen Fällen CMD /Csinnvoll sein, " " zu verwenden. Wenn ich beispielsweise den externen Befehl verwende PSEXEC(heruntergeladen von SysInternals) und versuche, " DIR" auf einem Remotecomputer auszuführen, versucht Windows, den Befehl " " auszuführen . Windows kann diesen Befehl nicht ausführen, da es keine Datei mit den Endungen " ", " " oder " " mit einer anderen unterstützten Erweiterung DIRgibt . (Unterstützte Erweiterungen können durch Ausführen von " " angezeigt werden.)DIR.EXEDIR.BATDIRECHO %PATHEXT%

Wenn ich in diesem Szenario jedoch versuche, " " auszuführen CMD /C DIR, funktioniert das, da Windows nach einer ausführbaren Datei mit dem Namen " CMD" sucht und diese findet und anschließend CMDden Befehl " " erfolgreich ausführt, DIRder ein interner Teil des CMDBefehls " " ist.

In diesem Fall können Sie es powershellgenauso einfach wie " CMD /C powershell" ausführen, sodass Sie keinen Vorteil aus dem unnötigen " CMD /C" ziehen. Der einzige Vorteil, den ich darin sehe, den zusätzlichen Schritt des Eingebens von " CMD /C" zu machen, besteht darin, ein Beispiel bereitzustellen, das nützlich sein wird, wenn jemand versucht, ein Beispiel zu ändern, um eine Befehlszeile " DIR" oder " COPY" auszuführen. Ein flexibleres Beispiel kann für manche Leute nützlich sein. Es ist wirklich nicht erforderlich, wenn die Leute wissen, was sie tun.

Was den zweiten Punkt angeht, den ich genannt habe, nämlich das Festlegen von Umgebungsvariablen, so ist das in diesem speziellen Fall ebenfalls etwas, was Sie nicht aktiv tun. Vielleicht denken manche Leute, dass sie die Sache erleichtern, indem sie dafür sorgen, dass die Umgebungsvariable PATH festgelegt wird. Wenn Sie jedoch Befehle direkt ausführen (z. B. über die Menüoption „Ausführen“ im Startmenü), sucht das Windows-Betriebssystem möglicherweise an einigen zusätzlichen Stellen nach Befehlen. Unter Windows XP oder neuer können Sie beispielsweise Folgendes ausführen:

reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths"

Wenn der Befehl, den Sie ausführen möchten, unter „App-Pfade“ aufgeführt ist, findet Windows das Programm möglicherweise, auch wenn es nicht im Pfad enthalten ist. Daher findet Windows wahrscheinlich sogar MEHR als nur das, was CMD im von CMD verwendeten PFAD finden würde.

Ein möglicher Vorteil besteht darin, dass Sie CMD so ausführen möchten, dass Sie auf eine Umgebungsvariable wie %USERPROFILE% oder %LOGONSERVER% oder %TEMP%/%TMP% verweisen können. Da Sie dies jedoch nicht tun, müssen Sie " CMD /C" nicht ausführen.

Also, für Ihren speziellen Fall: Es gibt keinen guten Grund, dies zu tun. Die Auswirkungen, die Sie erzielen, sind, dass Ihr Computer mehr Arbeit leisten muss, der Prozess verlangsamt wird und mehr Speicher verbraucht wird (und all dies geschieht auf modernen Geräten nur in vernachlässigbarem Umfang).

Antwort2

Weil es die Farbe entfernt.

Sie glauben möglicherweise, dass die Leute den blauen Hintergrund als störend empfinden.

Antwort3

Mit fordern Sie die aktuelle Shell, den Explorer, auf, cmd mit Parametern mit dem analysierten Wert %1 für cmd cmd powershellaufzurufen .powershell, "imageSeqView ..."

In diesem Fall "powershell"erwartet cmd entweder einen cmd-Befehl, eine EXE oder eines der von cmd unterstützten Skripts, z. B. bat.

Mit fordern Sie die aktuelle Shell, den Explorer, auf, Powershell mit Parametern mit dem analysierten Wert %1 powershell "imageSeqView ..."aufzurufen .powershellimageSeqView ...

In diesem Fall imageSeqViewerwartet Powershell, dass es sich bei " " entweder um ein Cmdlet, eine EXE oder ein Powershell-Skript handelt.

Sofern es sich bei " imageSeqView" um eine Powershell-Funktion handelt, ist die 1. Möglichkeit völlig unnötig und mindert die Performance leicht.

Für Befehlsfensteroptionen gibt es in Powershell ähnliche Optionen wie -NoExit, was dasselbe wie /K in cmd sein sollte.

Für das Pipe-Lining und Initialisieren von Umgebungsvariablen kann Powershell dasselbe tun.

verwandte Informationen