2011-01-09 6 views
68

Ich versuche, eine EXE-Datei mit einem PowerShell-Skript auszuführen. Wenn ich die Befehlszeile verwenden, es ohne ein Problem funktioniert (erster liefern ich den Namen der ausführbaren Datei und eine Reihe von Parametern, die er aufrufen):Ausführen einer EXE-Datei mit einem PowerShell-Skript

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

Aber tun genau dasselbe innerhalb eines Skripts einen Fehler zurückgibt:

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 aufgerufen, um den Befehl "&" Operator.)

Wie kann ich dieses Problem beheben?

+3

Geben Sie bitte Ihren Code ein. Da das Problem dort liegt, ist es viel einfacher, es sich anzusehen, als zu raten. –

Antwort

79
& "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: sorry ich verpasst "(ich habe den Befehl, um die Verwendung von aufgerufen" & "Operator)" Satz. 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"
+0

Seltsam, dass der Befehl in der ursprünglichen Frage, fast genau, für mich auf einer VM in PS2.0 funktioniert. Aber derselbe Befehl schlägt jetzt auf dem PS4.0-System fehl. Interessanterweise rufe ich auch TestExecute an. Ich denke, dass ich Option 2 am liebsten mag, ich gebe das eine Chance, danke! – EJA

22

Es sieht so aus, als ob Sie sowohl die EXE und das erste Argument in einer einzigen Zeichenfolge z. '"C:\Program Files\Automated QA\TestExecute 8\Bin\TestExecute.exe" C:\temp\TestProject1\TestProject1.pjs /run /exit /SilentMode'. Dies wird nicht funktionieren. In der Regel rufen Sie einen nativen Befehl, der ein Leerzeichen in seinem Weg hat wie so:

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

Das heißt & gefolgt von einem String werden erwartet, die einen Befehl identifiziert: Cmdlet, Funktion, nativen exe relativer oder absoluter Pfad.

Sobald Sie gerade diese Arbeit erhalten:

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

Beginn der Arbeit der Argumente wie nötig 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).

+1

Gibt es trotzdem, das Powershell-Skript ohne den vollständigen Pfad auszuführen, wenn sich das Skript und die EXE im selben Ordner befinden? Oder ist es möglich, einen relativen Pfad zu verwenden? – guanome

+6

Wenn sich die Exe im gleichen Ordner befindet, dann können Sie dies '. \ Foo.exe' machen und Sie können auch einen relativen Pfad' .. \ .. \ foo.exe' und einen relativen Pfad mit Leerzeichen '& 'verwenden. . \ .. \ Pfad mit Leerzeichen \ foo.exe''. –

+0

Wenn Sie ** Pipes ** in Ihrem Befehl haben, sollten Sie Anführungszeichen verwenden: 'cmd/c 'C: \ temp \ strarc.exe -cjd: M: \ | C: \ temp \ strarc.exe -s: 8 -xd: N: \ "'. – larkee

-1

Der Begriff ‚greyhound.exe‘ wird nicht als Name eines Cmdlets erkannt, Funktion, Skriptdatei oder ein geschriebenes Programm ...

Aber wenn ich es als vertrauenswürdiger Befehl ausführen. \ Greyhound.exe dann wird die ausführbare Datei ausgeführt.