从PowerShell运行MsiExec并获取返回代码

时间:2010-11-08 13:47:59

标签: powershell return-value exit-code msiexec

使用BAT/CMD脚本,我只需使用"msiexec /i <whatever.msi> /quiet /norestart",然后检查%errorlevel%的结果。

VBScript使用Wscript.Shell对象Run()方法,我可以得到如下结果:

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

如何使用PowerShell执行此操作?

3 个答案:

答案 0 :(得分:49)

我会在Start-Process中将其包装起来并使用生成的流程对象的ExitCode属性。例如

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

答案 1 :(得分:18)

$LastExitCode

$?

取决于你所追求的。前者是整数,后者只是一个布尔值。此外,$LastExitCode仅填充正在运行的本机程序,而$?通常会告知最后一个命令是否成功运行 - 因此它也将设置为cmdlet。

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

答案 2 :(得分:0)

您还可以使用提供一些功能的Powershell应用程序部署工具包。

然后您可以使用

Execute-MSI -Action 'Install' -Path "$dirFiles\your.msi" -AddParameters "INSTALLFOLDER=C:\$appFolder"
  

信息http://psappdeploytoolkit.com/