2011-01-09 22 views
68

Sto tentando di eseguire un file EXE utilizzando uno script PowerShell. Se uso la linea di comando che funziona senza un problema (prima fornisco il nome dell'eseguibile e una serie di parametri per invocarlo):Esecuzione di un file EXE utilizzando uno script PowerShell

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

Ma fare la stessa cosa all'interno di uno script restituisce un errore:

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.

(ho invocato il comando utilizzando l'operatore "&".)

Come posso risolvere questo problema?

+3

Invia il tuo codice, per favore. Poiché è lì che sta il problema, averlo a disposizione è molto più facile che indovinare. –

risposta

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")

UPDATE: mi dispiace perdere "(ho invocato il comando utilizzando il" "operatore &)" frase. Ho avuto questo problema quando stavo valutando il percorso in modo dinamico. Prova costruzione Invoke-Expression:

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

Strano che il comando nella domanda originale, quasi esattamente, funzioni per me su una VM in PS2.0. Ma lo stesso comando ora non funziona sul sistema PS4.0. È interessante notare che sto chiamando anche TestExecute. Penso che mi piaccia l'opzione 2, darò uno scatto, grazie! – EJA

22

Sembra che si sta specificando sia il file EXE e il suo primo argomento in una singola stringa per esempio; '"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode'. Questo non funzionerà. In generale si richiama un comando nativo che ha uno spazio nel percorso in questo modo:

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

Cioè & Deve essere seguito da una stringa che identifica un comando: cmdlet, funzione, exe nativo percorso relativo o assoluto.

volta che si ottiene proprio questo lavoro:

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

iniziare a lavorare su citando degli argomenti, se necessario. Anche se sembra che i tuoi argomenti dovrebbero andare bene (niente spazi, nessun altro carattere speciale interpretato da PowerShell).

+1

Esiste comunque lo script PowerShell senza il percorso completo, se lo script e l'exe si trovano nella stessa cartella? O è possibile utilizzare un percorso relativo? – guanome

+6

Se l'exe si trova nella stessa cartella, puoi fare questo '. \ Foo.exe' e puoi anche usare un percorso relativo' .. \ .. \ foo.exe' e un percorso relativo con spazi '& '. . \ .. \ percorso con spazi \ foo.exe''. –

+0

Quando hai ** pipe ** nel tuo comando di quanto dovresti usare virgolette: 'cmd/c" C: \ temp \ strarc.exe -cjd: M: \ | C: \ temp \ strarc.exe -s: 8 -xd: N: \ "'. – larkee

-1

Il termine 'greyhound.exe' non è riconosciuto come il nome di un cmdlet, una funzione, file di script o un programma eseguibile ...

Ma se lo faccio funzionare come un comando di fiducia. \ Greyhound.exe quindi viene eseguito l'eseguibile.

Problemi correlati