Puedo expresar mi necesidad con el siguiente escenario: Escriba una función que acepte una cadena para ejecutar como un comando nativo.¿Cómo se ejecuta un comando nativo arbitrario desde una cadena?
No es demasiado exagerado una idea: si está interactuando con otras utilidades de línea de comandos de otra parte de la empresa que le proporciona un comando para ejecutar al pie de la letra. Como no controla el comando, necesita aceptar cualquier comando válido como entrada. Estos son los principales contratiempos que he podido superar fácilmente:
El comando podría ejecutar un programa de vida en un camino con un espacio en el que:
$command = '"C:\Program Files\TheProg\Runit.exe" Hello';
El comando puede tener parámetros con espacios en ellos:
$command = 'echo "hello world!"';
El comando podría tener garrapatas, tanto individuales y dobles:
$command = "echo `"it`'s`"";
¿Hay alguna forma limpia de lograr esto? Solo he sido capaz de idear soluciones escandalosas y feas, pero para un lenguaje de scripting siento que esto debería ser completamente simple.
Aliasing es grande. Recuerde, si se muda a otra máquina o envía esa secuencia de comandos a otra persona, ese alias probablemente no se configure. Prefiere los nombres completos de las funciones de PowerShell. –
@Doug: la mayor parte del tiempo lo hago o uso los alias incorporados (especialmente por brevedad en la línea de comandos). Las cosas 'eval' son medio bromas porque así se llama en muchos otros lenguajes de scripting, y esta no es la primera pregunta que he visto donde alguien no tenía idea acerca de' invoke-expression'. Y el caso del OP suena como el guión interno solamente. –
He intentado esto, pero no funciona con: $ command = '"C: \ Archivos de programa \ Windows Media Player \ mplayer2.exe" "H: \ Audio \ Music \ Stevie Wonder \ Stevie Wonder - Superstition. mp3 "' –