2010-11-08 89 views
27

使用BAT/CMD脚本我可以简单地使用"msiexec /i <whatever.msi> /quiet /norestart",然后检查%errorlevel%的结果。从PowerShell运行MsiExec并获取返回码

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

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

我怎样才能做到这一点使用PowerShell?

+0

有完整源代码的任何示例? – Kiquenet 2012-06-07 09:45:10

回答

48

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

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

这就是我正在寻找的!然而,它是“ArgumentList”而不是“ArgumentsList”,但无论如何你都回答了这个问题 - 谢谢! – Skatterbrainz 2010-11-12 13:24:27

+0

哈......这是一个错字。我刚刚编辑了我的答案。 – ravikanth 2010-11-12 13:43:36

+2

注意事项; 1.在引用的-ArgumentList中,参数是空格分隔的,单引号可以用来保存名称中包含空格的路径。 2.ExitCode只有在所有衍生窗口关闭时才可用;我在PS v4.0上。 – AnneTheAgile 2015-01-21 18:23:29

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 
相关问题