2010-11-08 19 views
27

Con la secuencia de comandos BAT/CMD puedo simplemente usar "msiexec /i <whatever.msi> /quiet /norestart" y luego marcar %errorlevel% para obtener el resultado.Ejecute MsiExec desde PowerShell y obtenga el código de retorno

Con VBScript, utilizando el método Wscript.Shell objeto Run(), puedo conseguir el resultado como este:

"result = oShell.Run("msiexec /i ...", 1, True)" 

¿Cómo se puede hacer esto con PowerShell?

+0

muestra con el código fuente completo? – Kiquenet

Respuesta

48

Lo envolvería en el proceso de arranque y usaría la propiedad ExitCode del objeto de proceso resultante. Por ejemplo

(Start-Process -FilePath "msiexec.exe" -ArgumentList "<<whatever>>" -Wait -Passthru).ExitCode 
+0

¡Eso es lo que estaba buscando! Sin embargo, es "ArgumentList", no "ArgumentsList", pero en cualquier caso, usted respondió la pregunta, ¡gracias! – Skatterbrainz

+0

Haa ... eso fue un error tipográfico. Acabo de editar mi respuesta. – ravikanth

+2

Notas; 1.Al lado de la ArgumentList citada, los argumentos están delimitados por espacios y las comillas simples se pueden usar para contener elementos como una ruta con espacios en el nombre. 2.ExitCode solo está disponible si todas las ventanas generadas están cerradas; 3.Estoy en PS v4.0. – AnneTheAgile

18
$LastExitCode 

o

$? 

dependiendo de lo que está buscando. El primero es un número entero, el último solo un booleano. Además, $LastExitCode solo se llena para los programas nativos que se ejecutan, mientras que $? generalmente indica si la ejecución del último comando fue exitosa o no, por lo que también se establecerá para los cmdlets.

PS Home:\> cmd /c "echo foo"; $?,$LASTEXITCODE 
foo 
True 
0 
PS Home:\> cmd /c "ech foo"; $?,$LASTEXITCODE 
'ech' is not recognized as an internal or external command, 
operable program or batch file. 
False 
1 
Cuestiones relacionadas