Frage 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 es ohne Probleme (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

Aber genau das Gleiche in einem Skript zu tun, gibt einen Fehler zurück:

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

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

Wie kann ich dieses Problem beheben?


76
2018-01-09 15:09


Ursprung


Antworten:


& "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 habe ich verpasst "(Ich habe den Befehl mit dem Operator" & "aufgerufen)". Ich hatte dieses Problem, als ich den Pfad dynamisch auswertete. Versuchen Sie Invoke-Expression-Konstruktion:

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

89
2018-01-09 16:05



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

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

Das ist & erwartet, dass eine Zeichenfolge folgt, die einen Befehl identifiziert: cmdlet, function, native exe relativ oder absoluter Pfad.

Sobald Sie nur das funktioniert haben:

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

Fangen Sie an, bei Bedarf die Argumente zu zitieren. Es sieht zwar so aus, als ob Ihre Argumente in Ordnung wären (keine Leerzeichen, keine anderen Sonderzeichen, die von PowerShell interpretiert werden).


23
2018-01-10 04:41