2010-01-17 6 views
34

¿Cómo puedo ejecutar un ejecutable en PowerShell y a través de una sentencia if para determinar si tuvo éxito o falló?Invocar un exe de PowerShell y obtener comentarios sobre el éxito o el fracaso

Más específicamente estoy tratando de obtener devenv.exe para construir una solución desde un script de PowerShell y necesito saber si tuvo éxito o falló. Por fallado, quiero decir que la construcción ha fallado y estoy suponiendo devenv está enviando algo a la concha (posiblemente en la corriente stderr?)

Intenté usar &, y Invoke-ExpressionInvoke-Item y conseguido que todos ellos ejecutar el exe Pero nunca pude obtener retroalimentación sobre los éxitos/fracasos.

+0

¿Hay una razón por la cual no se utiliza msbuild.exe para construir la solución en lugar de devenv.exe? – Filburt

+1

La única razón es que no soy lo suficientemente competente en el uso de msbuild. Tengo una máquina de compilación que desarrolla mis soluciones, pero no sé cómo reutilizar las definiciones de compilación para mi máquina local: | – urig

+3

Si quieres probarlo, aquí tienes una referencia sobre cómo usar msbuild para construir soluciones: http://msdn.microsoft.com/en-us/library/z7f65y0d.aspx – Filburt

Respuesta

59

¿Ha intentado utilizar la variable $LASTEXITCODE? Contendrá el código de salida del último .exe que se invocó.

+2

Eso hizo el truco. $ lastexitcode -eq 0 cuando tiene éxito, 1 cuando falla la construcción. :) – urig

+0

No funciona. La variable está vacía. –

+0

Funciona muy bien de forma interactiva. Sin embargo, quería dejar que el mensaje indicara si el último comando fue exitoso o no; '$ LastExitCode' solo cambia cuando se ejecuta ejecutable, ya que las funciones y CmdLets no tienen" código de salida "; Tener eso en el prompt puede ser engañoso, porque no puedo juzgar si el código de salida proviene de la última declaración. Ojalá CmdLets siempre restablezca esta variable. –

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