Wykonywanie pliku EXE przy użyciu skryptu PowerShell


111

Próbuję wykonać plik EXE przy użyciu skryptu PowerShell. Jeśli korzystam z wiersza poleceń to działa bez problemu (najpierw podaję nazwę pliku wykonywalnego i szereg parametrów, aby go wywołać):

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

Ale zrobienie dokładnie tego samego wewnątrz skryptu zwraca błąd:

Termin „C: \ Program Files \ Automated QA \ TestExecute 8 \ Bin \ TestExecute.exe” C: \ temp \ TestProject1 \ TestProject1.pjs / run / exit / SilentMode nie jest rozpoznawany jako nazwa cmdletu , funkcji , plik skryptu lub działający program. Sprawdź pisownię nazwy lub, jeśli ścieżka została dołączona, sprawdź, czy jest ona poprawna i spróbuj ponownie.

(Wywołałem polecenie, używając operatora „&”.)

Jak mogę rozwiązać ten problem?


4
Prześlij swój kod, proszę. Ponieważ na tym polega problem, przyjrzenie się temu jest znacznie łatwiejsze niż zgadywanie.
— Cody Grey

Odpowiedzi:


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

AKTUALIZACJA: przepraszam, że przegapiłem zdanie "(wywołałem polecenie, używając operatora" & ")". Miałem ten problem, gdy dynamicznie oceniał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"

Dziwne, że polecenie z pierwotnego pytania prawie dokładnie działa dla mnie na maszynie wirtualnej w PS2.0. Ale to samo polecenie nie działa teraz w systemie PS4.0. Co ciekawe, dzwonię również do TestExecute. Myślę, że najbardziej podoba mi się opcja 2, dam temu szansę, dzięki!
— EJA

33

Wygląda na to, że określasz zarówno plik EXE, jak i jego pierwszy argument w jednym ciągu, np.; '"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode'. To nie zadziała. Ogólnie rzecz biorąc, wywołujesz natywne polecenie, które ma spację na swojej ścieżce:

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

Oznacza to &oczekuje, że będzie następnie ciąg, który identyfikuje polecenie: cmdlet, funkcja, rodzimych exe ścieżkę względną lub bezwzględną.

Gdy już to działa:

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

W razie potrzeby rozpocznij pracę nad cytowaniem argumentów. Chociaż wygląda na to, że twoje argumenty powinny być w porządku (bez spacji, żadnych innych znaków specjalnych interpretowanych przez PowerShell).


2
Czy istnieje możliwość wykonania skryptu PowerShell bez pełnej ścieżki, jeśli skrypt i plik exe znajdują się w tym samym folderze? Czy można użyć ścieżki względnej?
— guanome

7
Jeśli plik exe znajduje się w tym samym folderze, możesz to zrobić .\foo.exei możesz również użyć ścieżki względnej ..\..\foo.exei ścieżki względnej ze spacjami & '..\..\path with spaces\foo.exe'.
— Keith Hill

Gdy masz rur w swojej komendzie niż należy użyć cytatów: cmd /c "C:\temp\strarc.exe -cjd:M:\ | C:\temp\strarc.exe -s:8 -xd:N:\".
— larkee

2

W programie PowerShell przejdź do lokalizacji pliku .exe. Na przykład:

cd C: \ Users \ Administrators \ Downloads

PS C: \ Users \ Administrators \ Downloads> & '. \ Aaa.exe'

Pojawi się instalator i postępuj zgodnie z instrukcjami wyświetlanymi na ekranie.


dokładnie to, czego chcę! uruchom plik .exe & „. \ aaa.exe”
— Sharif Yazdian

2
  1. clone $ args
  2. umieść swoje argumenty w nowej tablicy
  3. & $ ścieżka $ args

Próbny:

$exePath = $env:NGINX_HOME + '/nginx.exe'
$myArgs = $args.Clone()

$myArgs += '-p'
$myArgs += $env:NGINX_HOME

& $exepath $myArgs

Thx @nodoccat, działał jak urok, uruchamiając polecenie dockera z bardzo długą listą argumentów.
— danidemi

1

Nie będąc programistą, znalazłem rozwiązanie polegające na uruchamianiu wielu poleceń ps w jednej linii. Na przykład:

powershell "& 'c:\path with spaces\to\executable.exe' -arguments ; second command ; etc

Umieszczając "(podwójny cudzysłów) przed & (ampersand)" uruchamia plik wykonywalny. W żadnym z przykładów, które nie znalazłem, nie było o tym wspominane. Bez podwójnych cudzysłowów otwiera się zachęta ps i czeka na wejście.


Cześć RichardE. Czy możesz poprawić formatowanie swojej odpowiedzi? W trybie edycji dostępna jest pomoc dotycząca formatowania, spójrz na nią.
— Dorian Turba
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.