2011-01-09 17 views
68

Próbuję wykonać plik EXE przy użyciu skryptu PowerShell. Gdybym użyć wiersza polecenia to działa bez problemu (pierwszy dostarczyć nazwę pliku wykonywalnego i szeregu parametrów, aby je wywołać):Wykonywanie pliku EXE przy użyciu skryptu PowerShell

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

ale robi dokładnie to samo wewnątrz skryptu zwraca błąd:

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 wywoływane polecenie za pomocą operatora "&").

Jak mogę rozwiązać ten problem?

+3

Wyślij swój kod, proszę. Skoro problem leży w tym, że patrzenie na to jest znacznie łatwiejsze niż zgadywanie. –

Odpowiedz

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

lub

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

UPDATE: Niestety brakowało mi "(I wywoływane polecenie używając" & "operator)" sankcja. Miałem ten problem, gdy dynamicznie analizowałem ścieżkę. Wypróbuj konstrukcję Invoke-Expression:

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

Dziwne, że polecenie w pierwotnym pytaniu, prawie dokładnie, działa dla mnie na VM w PS2.0. Ale ta sama komenda kończy się niepowodzeniem w systemie PS4.0. Co ciekawe, dzwonię także do TestExecute. Myślę, że najbardziej lubię opcję 2, dam ci szansę, dzięki! – EJA

22

Wygląda na to, że określasz zarówno EXE, jak i jego pierwszy argument w jednym ciągu znaków np.; '"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode'. To nie zadziała. W ogóle wywołać rodzimych polecenie, które ma miejsce na swojej drodze tak:

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

To & spodziewa się być przestrzegane przez ciąg, który identyfikuje polecenie: cmdlet, funkcji natywnej exe ścieżkę względną lub bezwzględną.

Gdy pojawi się tylko tej pracy:

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

rozpocząć pracę na cytowanie z argumentów jest to konieczne. Chociaż wygląda na to, że twoje argumenty powinny być w porządku (bez spacji, żadnych innych znaków specjalnych interpretowanych przez PowerShell).

+1

Czy jest mimo to wykonanie skryptu powłoki powershell bez pełnej ścieżki, jeśli skrypt i plik exe znajdują się w tym samym folderze? Czy możliwe jest użycie ścieżki względnej? – guanome

+6

Jeśli plik exe znajduje się w tym samym folderze, możesz to zrobić '. \ Foo.exe' i możesz również użyć względnej ścieżki' .. \ .. \ foo.exe' oraz względnej ścieżki ze spacjami '& '. . \ .. \ ścieżka ze spacjami \ foo.exe''. –

+0

Gdy w twoim poleceniu masz ** potoki **, powinieneś użyć cudzysłowów: 'cmd/c" C: \ temp \ strarc.exe -cjd: M: \ | C: \ temp \ strarc.exe -s: 8 -xd: N: \ "'. – larkee

-1

Termin „greyhound.exe” nie jest rozpoznawana jako nazwy apletu polecenia, funkcji skryptu lub program wykonywalny ...

ale jeśli uruchomić go jako zaufanego polecenia. \ Greyhound.exe następnie uruchamia się plik wykonywalny.

Powiązane problemy