Ejecutar MsiExec de PowerShell y obtener código de retorno
-
29-09-2019 - |
Pregunta
Con la escritura BAT/CMD
puedo simplemente usar "msiexec /i <whatever.msi> /quiet /norestart"
y después comprobar %errorlevel%
para el resultado.
Con VBScript
, utilizando el método de objeto Wscript.Shell
Run()
, que puede obtener el resultado como este:
"result = oShell.Run("msiexec /i ...", 1, True)"
¿Cómo puedo hacer esto con PowerShell?
Solución
Me envolvería que en Start-Proceso y utilizar la propiedad ExitCode del procedimiento objeto resultante. Por ejemplo
(Start-Process -FilePath "msiexec.exe" -ArgumentList "<<whatever>>" -Wait -Passthru).ExitCode
Otros consejos
$LastExitCode
o
$?
dependiendo de lo que está buscando. El primero es un número entero, éste sólo un booleano. Por otra parte, $LastExitCode
solamente está poblada por los programas nativos que se está ejecutando, mientras que $?
dice generalmente si la última instrucción ejecutada fue exitosa o no -. Por lo que también se establecerá para 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
También puede utilizar el kit de implementación de aplicaciones PowerShell que proporciona varias cosas.
A continuación, se puede utilizar, por ejemplo
Execute-MSI -Action 'Install' -Path "$dirFiles\your.msi" -AddParameters "INSTALLFOLDER=C:\$appFolder"