2010-01-17 13 views
34

Come è possibile eseguire un eseguibile in PowerShell e attraverso un'istruzione if determinare se è riuscito o meno?Richiamare un exe da PowerShell e ottenere feedback in caso di esito positivo o negativo

In particolare, sto cercando di ottenere devenv.exe per creare una soluzione da uno script PowerShell e ho bisogno di sapere se è riuscito o meno. Con fallito, voglio dire che la costruzione ha fallito e sto assumendo devenv sta inviando qualcosa alla shell (possibilmente nel flusso stderr?)

Ho provato ad utilizzare &, Invoke-Expression e Invoke-Item e sono riusciti a ottenere tutti loro per eseguire l'exe. Ma non sono mai stato in grado di ottenere feedback su successo/insuccessi.

+0

C'è un motivo per cui non si utilizza MSBuild.exe per creare la soluzione, invece di devenv.exe? – Filburt

+1

L'unica ragione è che non sono abbastanza abile nell'uso di msbuild. Ho una macchina di compilazione che costruisce le mie soluzioni ma non so come riutilizzare le definizioni di compilazione per la mia macchina locale: | – urig

+3

Se si vuole fare un tentativo, ecco un riferimento a come utilizzare msbuild per la creazione di soluzioni: http://msdn.microsoft.com/en-us/library/z7f65y0d.aspx – Filburt

risposta

59

Hai provato a utilizzare la variabile $LASTEXITCODE? Conterrà il codice di uscita dell'ultimo exe che è stato richiamato.

+2

Questo ha fatto il trucco. $ lastexitcode -eq 0 quando ha successo, 1 quando la costruzione fallisce. :) – urig

+0

Non funziona. La variabile è vuota –

+0

Funziona alla grande in modo interattivo. Tuttavia, volevo che il prompt indicasse se l'ultimo comando è riuscito o meno; '$ LastExitCode' cambia solo quando è in esecuzione eseguibile, poiché le funzioni e CmdLets non hanno" codice di uscita "; avere ciò in modo tempestivo può essere fuorviante, perché non posso giudicare se il codice di uscita è venuto dall'ultima affermazione. Vorrei che CmdLets reimposti sempre questa variabile. –

2
.\YOUREXE.exe 
if($LASTEXITCODE eq 0) 
{ 
    Write-Host "The last PS command executed successfully" 
} 
else 
{ 
    Write-Host "The last PS command failed" 
} 
Problemi correlati