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.
详情见。
我正在尝试在远程机器上安装我的 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.
详情见