我目前正在使用一个通过 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
$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