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

Ska*_*inz 28 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)"
Run Code Online (Sandbox Code Playgroud)

如何使用PowerShell执行此操作?

rav*_*nth 50

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

(Start-Process -FilePath "msiexec.exe" -ArgumentList "<<whatever>>" -Wait -Passthru).ExitCode
Run Code Online (Sandbox Code Playgroud)

  • 笔记; 1.在引用的-ArgumentList中,参数是以空格分隔的,单引号可用于保存项目,例如名称中带有空格的路径.2.ExitCode仅在所有衍生窗口关闭时可用; 我在PS v4.0上. (2认同)

Joe*_*oey 18

$LastExitCode
Run Code Online (Sandbox Code Playgroud)

要么

$?
Run Code Online (Sandbox Code Playgroud)

取决于你所追求的.前者是整数,后者只是一个布尔值.此外,$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
Run Code Online (Sandbox Code Playgroud)