我在Win 2008r2上使用Powershell对msiexec进行远程调用,如下所示:
Invoke-Command -session $Session -ScriptBlock{param($arguments) start-process -FilePath "msiexec.exe" -Wait $arguments } -Argument $arguments
目前我正在使用if(!$?)检查是否成功但这并不好,因为我刚刚看到msiexec进程抛出1638错误(因为应用程序已安装在远程服务器上)但值$?是真的。
有谁能告诉我如何捕获msiexec在远程服务器上返回的1638代码或其他任何内容?
谢谢,Rob。
答案 0 :(得分:1)
这是一种非常讨厌的方法,但我通过在$ script:functionexitcode方面使用类似全局的变量解决了这个问题,我将使用Start从msiexec.exe中分配.ErrorCode的值。 -Process。
然后在PowerShell脚本的主要部分,我将测试该值if($ functionexitcode -eq 0)。
以下是与Start-Process非常相似的安装方案的完整代码段:
# Start MSP upgrade to UR
$upgrade = (Start-Process -Filepath $msiexecpath -ArgumentList $argumentlist_BEGIN$argumentlist_MSP$argumentlist_END -PassThru -Wait -ErrorAction Stop)
if ($upgrade.ExitCode -eq 0) {
Write-Host "Upgrade successful. Error code:" $upgrade.ExitCode `
"`nUpgrade logfile location: " $workingdirectory\$msi_logfile_upgrade
$script:FunctionExitCode = $upgrade.ExitCode