66 Stimmen

Aufrufen einer Exe aus PowerShell und Abrufen von Feedback zu Erfolg oder Misserfolg

Wie kann ich eine ausführbare Datei in PowerShell ausführen und durch eine if-Anweisung feststellen, ob sie erfolgreich war oder nicht?

Genauer gesagt versuche ich, devenv.exe dazu zu bringen, eine Lösung aus einem PowerShell-Skript zu erstellen, und ich muss wissen, ob dies erfolgreich war oder fehlgeschlagen ist. Mit fehlgeschlagen meine ich, dass die Erstellung fehlgeschlagen ist und ich nehme an, dass devenv etwas an die Shell sendet (möglicherweise in der stderr Strom?)

Ich habe es mit & , Invoke-Expression y Invoke-Item und haben es geschafft, dass sie alle die Exe ausführen. Aber ich war nie in der Lage, eine Rückmeldung über Erfolg/Misserfolg zu erhalten.

0 Stimmen

Gibt es einen Grund, warum Sie nicht msbuild.exe anstelle von devenv.exe verwenden, um die Lösung zu erstellen?

1 Stimmen

Der einzige Grund ist, dass ich msbuild nicht gut genug beherrsche. Ich habe zwar eine Build-Maschine, die meine Lösungen erstellt, aber ich weiß nicht, wie ich die Build-Definitionen für meine lokale Maschine wiederverwenden kann :|

3 Stimmen

Wenn Sie es ausprobieren möchten, finden Sie hier einen Hinweis auf die Verwendung von msbuild zur Erstellung von Lösungen: msdn.microsoft.com/de-us/library/z7f65y0d.aspx

94voto

JaredPar Punkte 699699

Haben Sie versucht, die $LASTEXITCODE Variable? Sie enthält den Exit-Code der zuletzt aufgerufenen .exe.

3 Stimmen

Das war der Trick. $lastexitcode -eq 0 bei Erfolg, 1 bei fehlgeschlagener Erstellung :)

1 Stimmen

Funktioniert hervorragend interaktiv. Ich wollte jedoch, dass die Eingabeaufforderung anzeigt, ob der letzte Befehl erfolgreich war oder nicht; $LastExitCode ändert sich nur, wenn die ausführbare Datei ausgeführt wird, da Funktionen und CmdLets keinen "Exit-Code" haben; dies in der Eingabeaufforderung zu haben, kann irreführend sein, da ich nicht beurteilen kann, ob der Exit-Code von der letzten Anweisung stammt. Ich wünschte, CmdLets würde diese Variable immer zurücksetzen.

0 Stimmen

Mein ganzes Skript ist in Powershell und für einen Abschnitt würde es nicht $LastExitCode zurückgeben. Derselbe Befehl würde, wenn er über command ausgeführt würde, %ERRORLEVEL% zurückgeben. $? hat mir den Tag gerettet

19voto

Ajay Kumar K K Punkte 303
.\YOUREXE.exe
if($LASTEXITCODE -eq 0)
{
    Write-Host "The last PS command executed successfully"
} 
else 
{
    Write-Host "The last PS command failed"
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X