返回

在 PowerShell 中使用子例程运行 SSH 时常见问题解答

windows

在 Windows PowerShell 中使用子例程运行 SSH 的常见问题

简介

在 Windows PowerShell 中使用子例程运行 SSH 可能会遇到一些挑战,尤其是在使用 Call cmdlet 创建子例程进程时。本文将探讨此问题的根源,提供解决方案,并讨论替代方案。

问题:子例程中 SSH 失败

在子例程中运行 SSH 时,可能会出现错误,即使在命令行中正常工作。这是因为子例程进程与父进程共享其进程空间,而某些应用程序(如 SSH)需要自己的独立 I/O 流才能正常运行。

解决方案:使用 Start-Process 创建独立进程

为了解决这个问题,可以使用 Start-Process cmdlet 创建一个新的 SSH 进程,该进程具有自己的独立 I/O 流。此方法允许 SSH 命令正常工作。

$ssh = Start-Process -FilePath ssh -ArgumentList "user@host \"linux_command parameters\"" -RedirectStandardOutput $true
$ssh.StandardOutput.ReadToEnd()

替代方案:使用 -n 选项

另一种方法是使用 SSH 的 -n 选项,该选项指定 SSH 进程不执行远程命令。虽然这可以解决问题,但它并不是最佳解决方案,因为它阻止你从 SSH 进程执行远程命令。

最佳实践

最佳实践是使用 Start-Process cmdlet 创建具有独立 I/O 流的新 SSH 进程。这允许 SSH 命令正常运行,同时还允许你执行远程命令。

常见问题解答

1. 为什么子例程中 SSH 会失败?
答:子例程进程与父进程共享其进程空间,而某些应用程序(如 SSH)需要自己的独立 I/O 流才能正常运行。

2. 如何使用 Start-Process cmdlet 解决此问题?
答:使用 Start-Process 创建一个新的 SSH 进程,该进程具有自己的独立 I/O 流。

3. -n 选项如何帮助解决此问题?
答:-n 选项指定 SSH 进程不执行远程命令,从而使其进入交互模式并正常运行。

4. 为什么 -n 选项不是最佳解决方案?
答:-n 选项阻止你从 SSH 进程执行远程命令。

5. 在 Windows PowerShell 中使用 SSH 子例程的最佳做法是什么?
答:最佳实践是使用 Start-Process cmdlet 创建具有独立 I/O 流的新 SSH 进程。

结论

在 Windows PowerShell 中使用子例程运行 SSH 时,了解进程管道处理的不同之处非常重要。通过使用 Start-Process cmdlet 创建一个新的 SSH 进程,你可以确保 SSH 正常工作,同时还可以执行远程命令。