2011-01-09 229 views
68

Estoy tratando de ejecutar un archivo EXE utilizando un script de PowerShell. Si uso la línea de comandos funciona sin ningún problema (primera Puedo proporcionar el nombre del ejecutable y una serie de parámetros para invocarlo):Ejecutar un archivo EXE utilizando un script de PowerShell

"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode 

Pero haciendo exactamente lo mismo en el interior de un script devuelve un error:

The term '"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

(I invoca el comando utilizando el operador "&".)

¿Cómo puedo solucionar este problema?

+3

Publique su código, por favor. Dado que ahí es donde radica el problema, tenerlo a la vista es mucho más fácil que adivinar. –

Respuesta

79
& "C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode

o

[System.Diagnostics.Process]::Start("C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe", "C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode")

ACTUALIZACIÓN: lo siento, se perdió "(invoqué el comando utilizando la" & "operador)", sentencia. Tuve este problema cuando estaba evaluando la ruta dinámicamente. Trate de construcción Invoke-Expresión:

Invoke-Expression "& `"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe`" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode"
+0

Es extraño que el comando en la pregunta original, casi exactamente, funcione para mí en una VM en PS2.0. Pero ese mismo comando ahora falla en el sistema PS4.0. Curiosamente, estoy llamando TestExecute también. Creo que me gusta más la opción 2, voy a dar una oportunidad, ¡gracias! – EJA

22

Parece que está especificando tanto el EXE y su primer argumento en una sola cadena por ejemplo; '"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode'. Esto no funcionará En general se invoca un comando nativo que tiene un espacio en su camino, así:

& "c:\some path with spaces\foo.exe" <arguments go here> 

Es decir & espera ser seguido por una cadena que identifica un comando: cmdlet, función, exe nativo ruta relativa o absoluta.

Una vez que se acaba de este trabajo:

& "c:\some path with spaces\foo.exe" 

empezar a trabajar en cita de los argumentos según sea necesario. Aunque parece que tus argumentos deberían estar bien (sin espacios, sin otros caracteres especiales interpretados por PowerShell).

+1

¿Hay alguna forma de ejecutar el script powershell sin la ruta completa, si el script y el exe están en la misma carpeta? ¿O es posible usar una ruta relativa? – guanome

+6

Si el archivo exe está en la misma carpeta, puede hacer esto '. \ Foo.exe' y también puede usar una ruta relativa' .. \ .. \ foo.exe' y una ruta relativa con espacios '& '. . \ path con espacios \ foo.exe''. –

+0

Cuando tiene ** pipes ** en su comando, debe usar comillas: 'cmd/c" C: \ temp \ strarc.exe -cjd: M: \ | C: \ temp \ strarc.exe -s: 8 -xd: N: \ "'. – larkee

-1

El término 'greyhound.exe' no se reconoce como el nombre de un cmdlet, función, archivo de script o programa ejecutable ...

Pero si lo funciono como un comando de confianza. \ Greyhound.exe entonces el ejecutable se ejecuta.

Cuestiones relacionadas