Powershell调用命令不适用于远程计算机,并且没有返回任何错误消息



我正试图在远程计算机上安装MSI包。下面是我正在使用的脚本。在这个脚本中,invoke命令执行不会返回任何错误或成功消息。但是copy命令运行良好。任何帮助找到问题的人。

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:UsersAdministratorDesktop" -ToSession $session
try
{
$result = Invoke-Command -Session $session -ScriptBlock  {
param($hostname,$Port,$Protocol)
$value = msiexec /i "C:UsersAdministratorDesktopsoftware.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的不同寻常之处在于,它默认异步运行,因此您需要明确等待其终止才能了解其退出代码。

  • 退出代码从不通过输出(stdout(返回;相反,根据调用技术,必须查询Process对象的.ExitCode属性(当使用Start-Process -Wait -PassThru时(或使用自动$LASTEXITCODE变量(当使用下面显示的技术时(。

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

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

有关详细信息,请参阅此答案。

最新更新