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

从PowerShell运行MsiExec并获取返回代码,powershell,return-value,exit-code,windows-installer,Powershell,Return Value,Exit Code,Windows Installer,使用BAT/CMD脚本,我可以简单地使用“msiexec/I/quiet/norestart”,然后检查%errorlevel%以获得结果 使用VBScript,使用Wscript.ShellobjectRun()方法,我可以得到如下结果: "result = oShell.Run("msiexec /i ...", 1, True)" 我怎样才能用PowerShell做到这一点 $LastExitCode 或 取决于你想要什么。前者是一个整数,后者只是一个布尔值。此外,$LastExitC

使用
BAT/CMD
脚本,我可以简单地使用
“msiexec/I/quiet/norestart”
,然后检查
%errorlevel%
以获得结果

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

"result = oShell.Run("msiexec /i ...", 1, True)"
我怎样才能用PowerShell做到这一点

$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

我会将其包装在启动流程中,并使用结果流程对象的ExitCode属性。比如说

(Start-Process -FilePath "msiexec.exe" -ArgumentList "<<whatever>>" -Wait -Passthru).ExitCode
Execute-MSI -Action 'Install' -Path "$dirFiles\your.msi" -AddParameters "INSTALLFOLDER=C:\$appFolder"
(启动进程-文件路径“msiexec.exe”-ArgumentList”-等待-通过)。ExitCode

您还可以使用powershell应用程序部署工具包,该工具包提供了多种功能

然后您可以使用例如

(Start-Process -FilePath "msiexec.exe" -ArgumentList "<<whatever>>" -Wait -Passthru).ExitCode
Execute-MSI -Action 'Install' -Path "$dirFiles\your.msi" -AddParameters "INSTALLFOLDER=C:\$appFolder"
信息


这就是我要找的!然而,它是“ArgumentList”而不是“ArgumentsList”,但无论如何,你回答了这个问题-谢谢!笔记;1.在quoted-ArgumentList中,参数是以空格分隔的,单引号可以用来保存项目,比如名称中带有空格的路径。2.ExitCode仅在所有派生窗口关闭时可用;3.我使用的是PS v4.0。如果您不能使用引号中的
-ArgumentList“$arg1\和空格\'arg2”
,您可以用逗号分隔多个参数
-ArgumentList“$arg1\和空格\”,arg2
,一旦停止查找逗号,PowerShell将假定下一个是另一个位置参数,或者如果出现类似于
-Wait
的情况,它将继续处理命名参数。有完整源代码的示例吗?