如何通过 SSH 处理 Invoke-Command 错误

问题描述 投票:0回答:1

我目前正在使用一个通过 SSH 使用 Invoke-Command 的脚本,如下所示。虽然它运行良好,但我希望实现异常处理,特别是对于无法访问远程服务器的情况。

Invoke-Command -HostName '192.168.100.1' -ScriptBlock { Write-Output "Hi" }

当无法访问远程服务器时,我收到以下错误消息:“ssh:连接到主机 192.168.100.1 端口 22:连接超时”。

挑战在于脚本会停止,我无法手动中止它。因此,当脚本停止时,我无法在 if 子句或其他子句中检查此错误消息。来处理这个问题,因为以下代码不会被执行。

在这种情况下是否有任何推荐的方法或修复来实现正确的异常处理?

*(由于特殊的网络环境,我需要通过 SSH 使用远程 Powershell,因此使用 -HostName 而不是 -ComputerName 参数。)

我尝试通过附加“2>&1”将标准错误流 (2) 重定向到标准输出流,但脚本仍然停止,并且没有任何内容保存到变量中。

$result = Invoke-Command -HostName '192.168.100.1' -ScriptBlock { Write-Output "Hi" } 2>&1

powershell ssh powershell-remoting invoke-command powershell-7.0
1个回答
0
投票
$result = Invoke-Command -HostName '192.168.100.1' -ScriptBlock { Write-Output "Hi" } -ConnectingTimeout 5000 -ErrorAction STOP

通过添加 -ConnectingTimeout 参数,该命令不会导致脚本卡住并在指定时间后抛出错误。通过添加 -ErrorAction STOP 并将其放入 try-catch 块中,我能够处理不成功的连接。

try {
    Invoke-Command -HostName '192.168.100.1' -ScriptBlock { Write-Output "Hi" } -ConnectingTimeout 5000 -ErrorAction STOP    
}
catch {
    $_
}

感谢微软论坛的Rich M.和MotoX80提供解决方案。这里是我们对我的问题的讨论:如何通过 SSH 错误处理 Invoke-Command

© www.soinside.com 2019 - 2024. All rights reserved.