Menjalankan file EXE menggunakan skrip PowerShell

111

Saya mencoba menjalankan file EXE menggunakan skrip PowerShell. Jika saya menggunakan baris perintah, ini berfungsi tanpa masalah (pertama-tama saya memberikan nama yang dapat dieksekusi dan serangkaian parameter untuk memintanya):

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

Tetapi melakukan hal yang persis sama di dalam skrip akan mengembalikan kesalahan:

Istilah '"C: \ Program Files \ Automated QA \ TestExecute 8 \ Bin \ TestExecute.exe" C: \ temp \ TestProject1 \ TestProject1.pjs / run / exit / SilentMode' tidak dikenali sebagai nama cmdlet, fungsi , file skrip, atau program yang dapat dioperasikan. Periksa ejaan nama, atau jika sebuah jalur disertakan, verifikasi bahwa jalur tersebut benar dan coba lagi.

(Saya menjalankan perintah menggunakan operator "&".)

Bagaimana cara memperbaiki masalah ini?

Eden
sumber
4
Tolong kirimkan kode Anda. Karena di situlah letak masalahnya, melihatnya untuk dilihat jauh lebih mudah daripada menebak-nebak.
Cody Gray

Jawaban:

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

atau

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

UPDATE: maaf saya melewatkan "(saya memanggil perintah menggunakan" & "operator)" kalimat. Saya mengalami masalah ini ketika saya mengevaluasi jalur secara dinamis. Coba konstruksi Invoke-Expression:

Invoke-Expression "& `"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe`" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode"
Tomas Panik
sumber
Aneh bahwa perintah dalam pertanyaan awal, hampir persis, berfungsi untuk saya pada VM di PS2.0. Tetapi perintah yang sama sekarang gagal pada sistem PS4.0. Yang cukup menarik, saya juga memanggil TestExecute. Saya rasa saya paling suka opsi 2, saya akan mencobanya, terima kasih!
EJA
33

Sepertinya Anda menentukan EXE dan argumen pertamanya dalam satu string misalnya; '"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode'. Ini tidak akan berhasil. Secara umum Anda memanggil perintah asli yang memiliki spasi di jalurnya seperti ini:

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

Itu &diharapkan diikuti oleh string yang mengidentifikasi perintah: cmdlet, function, native exe relative atau absolute path.

Setelah Anda mulai bekerja:

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

Mulailah mengerjakan kutipan argumen seperlunya. Meskipun tampaknya argumen Anda baik-baik saja (tanpa spasi, tidak ada karakter khusus lain yang ditafsirkan oleh PowerShell).

Keith Hill
sumber
2
Apakah ada cara untuk mengeksekusi skrip PowerShell tanpa path lengkap, jika skrip dan exe berada di folder yang sama? Atau mungkinkah menggunakan jalur relatif?
guanome
7
Jika exe berada di folder yang sama maka Anda dapat melakukan ini .\foo.exedan Anda juga dapat menggunakan jalur relatif ..\..\foo.exedan jalur relatif dengan spasi & '..\..\path with spaces\foo.exe'.
Keith Hill
Bila Anda memiliki pipa di perintah Anda daripada Anda harus menggunakan tanda kutip: cmd /c "C:\temp\strarc.exe -cjd:M:\ | C:\temp\strarc.exe -s:8 -xd:N:\".
larkee
2

Di Powershell, cd ke lokasi file .exe. Sebagai contoh:

cd C: \ Users \ Administrators \ Downloads

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

Penginstal muncul dan mengikuti instruksi di layar.

randomguy
sumber
persis seperti yang kuinginkan! menjalankan file .exe & '. \ aaa.exe'
Sharif Yazdian
2
  1. klon $ args
  2. dorong argumen Anda dalam array baru
  3. & $ path $ args

Demo:

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

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

& $exepath $myArgs
NoDocCat
sumber
Thx @nodoccat, bekerja seperti pesona untuk meluncurkan perintah buruh pelabuhan dengan daftar argumen yang sangat panjang.
danidemi
1

Bukan sebagai pengembang, saya menemukan solusi dalam menjalankan beberapa perintah ps dalam satu baris. Misalnya:

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

Dengan menempatkan "(tanda kutip ganda) sebelum & (ampersand) menjalankan eksekusi. Dalam contoh tidak ada yang saya temukan ini disebutkan. Tanpa tanda kutip ganda, prompt ps terbuka dan menunggu masukan.

RichardE
sumber
Hai RichardE. Bisakah Anda meningkatkan format jawaban Anda? Dalam mode edit, bantuan pemformatan disediakan, lihat itu.
Dorian Turba