¿Por qué utilizar "Cmd /c Powershell" en lugar de simplemente "Powershell"?

¿Por qué utilizar "Cmd /c Powershell" en lugar de simplemente "Powershell"?

Agregué mi primer menú contextual usando el registro según las instrucciones dadas enesta pregunta(me yay).

Originalmente usé esto como el comando que ejecuta, es decir, el valor de la tecla "comando":

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

ImageSeqViewes el nombre de mi función de PowerShell, la importo en mi perfil de PowerShell. Funciona bien, pero me pregunto: ¿por qué utilizar cmdopen Powershellpara ejecutar la función? ¿No sería más sencillo simplemente hacer

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

Ese comando parece funcionar bien, pero como su uso parece canónico, cmdme pregunto si está matando cachorros en secreto o algo así.

ingrese la descripción de la imagen aquí

Respuesta1

No hay una buena razón para hacer esto. De hecho, el único efecto real que se produce es el de ralentizar las cosas.

La gente podría pensar que hay una buena razón para hacer esto. El uso de CMD tiene los siguientes efectos que comúnmente pueden ser buenos en algunos casos:

  • Habilita comandos internos, como " DIR"
  • Establece variables de entorno, como la variable PATH.

Sin embargo, en este caso, no se obtiene ninguno de esos beneficios. Veamos ambos escenarios:

Por lo tanto, en algunos casos puede haber un momento en el que usar " CMD /C" sea útil. Por ejemplo, si uso el comando externo PSEXEC(descargado de SysInternals) e intento ejecutar " DIR" en una computadora remota, Windows intentará ejecutar el DIRcomando " ". Windows no podrá ejecutar ese comando ya que no hay ningún archivo " DIR.EXE", " DIR.BAT" o " DIR" que termine con otra extensión compatible. (Las extensiones compatibles se pueden ver ejecutando " ECHO %PATHEXT%".)

Sin embargo, en este escenario, si intento ejecutar " CMD /C DIR", entonces funcionará, porque Windows buscará un ejecutable llamado " CMD", lo encontrará y luego CMDterminará ejecutando exitosamente el DIRcomando " ", que es un comando interno. parte del CMDcomando " ".

En este caso, puede ejecutar powershelltan fácilmente como " CMD /C powershell", por lo que no obtendrá ningún beneficio del innecesario " CMD /C". El único beneficio que veo al realizar el paso adicional de escribir " CMD /C" es proporcionar un ejemplo que será útil si alguien decide intentar modificar un ejemplo para ejecutar una línea de comando " DIR" o " COPY". Tener un ejemplo más flexible puede resultar útil para algunas personas. Realmente no es necesario cuando la gente sabe lo que está haciendo.

En cuanto al segundo punto que proporcioné, que es establecer variables de entorno, eso también es algo que no estás haciendo activamente en este caso particular. Quizás algunas personas piensen que están ayudando al establecer la variable de entorno PATH. Sin embargo, cuando ejecuta comandos directamente (por ejemplo, desde la opción de menú "Ejecutar" del menú Inicio), el sistema operativo Windows puede buscar comandos en algunos lugares adicionales. Por ejemplo, en Windows XP/más reciente puedes ejecutar:

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

Si el comando que desea ejecutar aparece en "Rutas de aplicaciones", Windows puede encontrar el programa incluso si no está en la ruta. Por lo tanto, es probable que Windows encuentre incluso MÁS de lo que CMD encontraría en la RUTA que utiliza CMD.

Un posible beneficio es si desea que se ejecute CMD para poder hacer referencia a una variable de entorno como %USERPROFILE% o %LOGONSERVER% o %TEMP%/%TMP%, pero como no está haciendo eso, no está necesitando ejecutar " CMD /C".

Entonces, para su caso particular: no hay una buena razón para hacerlo. Los efectos que está logrando son que su computadora haga más trabajo, ralentice el proceso y use más memoria (todo lo cual está haciendo en cantidades insignificantes en equipos modernos).

Respuesta2

Porque elimina el colorante.

Puede ser que piensen que a la gente le distrae el fondo azul.

Respuesta3

Con cmd powershell, le pide al shell actual, el explorador, que invoque cmd con parámetros powershell, "imageSeqView ..."con un valor analizado de %1 a cmd.

En este caso, "powershell"cmd espera que sea un comando cmd, un exe o uno de los scripts compatibles con cmd, por ejemplo, bat.

Con powershell "imageSeqView ...", le pide al shell actual, el explorador, que invoque powershellcon parámetros imageSeqView ...con un valor analizado de %1 en powershell.

En este caso, imageSeqViewPowerShell espera que " " sea un cmdlet, un exe o un script de PowerShell.

Siempre que " imageSeqView" sea una función de PowerShell, la primera forma es completamente innecesaria y reduce ligeramente el rendimiento.

Para las opciones de la ventana de comandos, existen opciones similares en PowerShell, como -NoExit, que debería ser igual que /K en cmd.

Para la canalización e inicialización de variables env, powershell puede hacer lo mismo.

información relacionada