28

使用BAT/CMD脚本,我可以简单地使用"msiexec /i <whatever.msi> /quiet /norestart"然后检查%errorlevel%结果。

有了VBScript,使用Wscript.Shell对象Run()方法,我可以得到这样的结果:

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

如何使用 PowerShell 执行此操作?

4

3 回答 3

51

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

(Start-Process -FilePath "msiexec.exe" -ArgumentList "<<whatever>>" -Wait -Passthru).ExitCode
于 2010-11-10T15:41:04.237 回答
17
$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
于 2010-11-08T14:17:30.860 回答
0

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

然后你可以使用例如

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

信息http://psappdeploytoolkit.com/

于 2018-11-06T09:45:28.430 回答