0

我在 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 代码或其他任何代码?

谢谢,罗伯。

4

1 回答 1

1

这是一种非常老套的方法,但我通过使用类似于全局的变量 $script:functionexitcode 解决了这个问题,我将使用 Start-Process 分配来自 msiexec.exe 的 .ErrorCode 的值。

然后在 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
于 2016-12-03T13:50:24.993 回答