使用Powershell远程调用msiexec获得结果

时间:2013-02-07 16:06:43

标签: powershell-v2.0 powershell-remoting

我在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。

1 个答案:

答案 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