Powershell Invoke Command 不适用于远程机器并且没有返回任何错误消息

Powershell Invoke Command is not working for Remote Machine and did not returning any error message

我正在尝试在远程机器上安装我的 MSI 包。下面是我正在使用的脚本。在此脚本中,调用命令执行未返回任何错误或成功 message.but 复制命令工作正常。任何人都可以帮助找到问题。

param([String]$MSILocation,[String]$RemoteComputerName,[String]$UserName,[String]$Password,[String]$Port,[String]$AccessKey,[String]$Protocol)
$ServeAdminPassword=  $Password  | ConvertTo-SecureString -AsPlainText -Force
$cred=New-Object System.Management.Automation.PSCredential($UserName,$ServeAdminPassword)
$hostname = hostname
$session = New-PSSession -ComputerName $RemoteComputerName -Credential $cred
$cpy   = Copy-Item $MSILocation  -Destination "C:\Users\Administrator\Desktop\" -ToSession $session
try
{
    $result = Invoke-Command -Session $session -ScriptBlock  {
        param($hostname,$Port,$Protocol)
         $value = msiexec /i "C:\Users\Administrator\Desktop\software.msi" SERVERNAME=$hostname PORTNO=$Port PROTOCOL=$Protocol /qb /forcerestart
        calc.exe
    } -ArgumentList $hostname,$Port,$Protocol | Select-Object value

}
catch
{
    $result = $error[0]
    echo $result
}
  • msiexec 的不寻常之处在于它默认 异步运行 ,因此您需要 显式等待其终止 以了解其退出代码。

  • 永远不会通过 output (stdout) 返回退出代码;相反,根据调用技术,您必须查询 Process 对象的 .ExitCode 属性(当您使用 Start-Process -Wait -PassThru 时)或使用 automatic $LASTEXITCODE variable(当您使用技术如下所示)。

强制同步执行并在 $LASTEXITCODE 中反映退出代码的一种简单方法是通过 cmd /c:

调用
# Call msiexec and wait for its termination.
cmd /c "msiexec /i C:\Users\Administrator\Desktop\software.msi SERVERNAME=$hostname PORTNO=$Port PROTOCOL=$Protocol /qb /forcerestart"
$LASTEXITCODE # Output msiexec's exit code.

详情见