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 スクリプトの主要部分で、($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 に答える