it-swarm.com.de

Ausführen einer EXE-Datei mit einem PowerShell-Skript

Ich versuche, eine EXE-Datei mit einem PowerShell-Skript auszuführen. Wenn ich die Befehlszeile benutze, funktioniert sie problemlos (zuerst gebe ich den Namen der ausführbaren Datei und eine Reihe von Parametern an, um sie aufzurufen):

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

Wenn Sie jedoch genau dasselbe innerhalb eines Skripts tun, wird ein Fehler ausgegeben:

Der Begriff '"C:\Programme\Automatisiert QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run/exit/SilentMode ' ist nicht als Name eines Cmdlets erkannt, Funktion, Skriptdatei oder bedienbar Programm. Überprüfen Sie die Schreibweise von Name oder, wenn ein Pfad enthalten war, Überprüfen Sie, ob der Pfad korrekt ist und versuchen Sie es nochmal.

(Ich habe den Befehl mit dem Operator "&" aufgerufen.)

Wie kann ich dieses Problem beheben?

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

oder

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

UPDATE: Entschuldigung, ich habe den Satz "&" verpasst (ich habe den Befehl mit dem Operator "&" aufgerufen) ". Ich hatte dieses Problem, als ich den Pfad dynamisch auswertete. Versuchen Sie die Invoke-Expression-Konstruktion:

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

Es sieht so aus, als würden Sie sowohl die EXE-Datei als auch das erste Argument in einer einzelnen Zeichenfolge angeben, z. '"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode'. Das wird nicht funktionieren. Im Allgemeinen rufen Sie einen systemeigenen Befehl auf, der ein Leerzeichen in seinem Pfad enthält:

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

Das heißt, & erwartet, dass eine Zeichenfolge folgt, die einen Befehl kennzeichnet: Cmdlet, Funktion, nativer relativer oder absoluter Pfad.

Sobald Sie genau das bekommen haben:

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

Beginnen Sie nach Bedarf mit Zitaten der Argumente. Ihre Argumente sollten zwar in Ordnung sein (keine Leerzeichen, keine anderen von PowerShell interpretierten Sonderzeichen).

27
Keith Hill

Cd in der Powershell an den Ort der .exe-Datei. Zum Beispiel:

cd C:\Benutzer\Administratoren\Downloads

PS C:\Benutzer\Administratoren\Downloads> & '.\Aaa.exe'

Das Installationsprogramm wird geöffnet und folgt den Anweisungen auf dem Bildschirm.

0
randomguy
  1. klonen Sie $ args
  2. Schieben Sie Ihre Argumente in ein neues Array
  3. & $ path $ args

Demo:

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

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

& $exepath $myArgs
0
NoDocCat