我需要能够在远程设备上创建一个进程并使用 PowerShell 脚本向它发送命令。我需要这样做,因为我在使用命令时会收到提示。我一直试图通过使用谷歌搜索和以下链接来弄清楚如何做到这一点:http: //tartarus.org/~simon/putty-snapshots/htmldoc/Chapter7.html#plink。从该链接中,我意识到在 Plink 中使用带有命令列表的文件将不起作用,原因如下(从该链接复制和粘贴):
您可以在服务器命令行上有效运行的任何非交互式命令,您都可以通过这种方式使用 Plink 在批处理文件中运行。
它说“非交互式命令”,这就是我正在使用的。无论如何,我也尝试过使用带有命令列表的文件,但它并没有解决我的问题,因为我基本上需要给出一个命令,等待,然后在提示我时再给出一个。这是我在PuTTY 常见问题解答中发现的,基本上是我想尝试的:
最好的选择可能是使用命令行连接工具 Plink。如果您可以将 Plink 作为第二个 Windows 进程启动,并安排您的主进程能够通过管道将数据发送到 Plink 进程并从中接收数据,那么您应该能够从您的程序建立 SSH 连接。例如,这就是 CVS for Windows 所做的。
编辑:根据 user2460798 的回答,我尝试了以下解决方案。我希望使用 PuTTY 并能够以这种方式向它发送命令。我现在的问题是我不知道如何向打开的 PuTTY 会话发送命令。所以基本上这段代码打开了一个 PuTTY 会话并尝试向它写入“ls”命令,但没有任何反应。我不知道“ls”文本的去向。
$procInfo = New-Object Diagnostics.ProcessStartInfo
$procInfo.RedirectStandardOutput=$true
$procInfo.RedirectStandardInput=$true
$procInfo.RedirectStandardError=$true
$procInfo.FileName="putty.exe"
$procInfo.Arguments="-ssh -pw <password> <username>@<device>"
$procInfo.UseShellExecute=$false
$p=[diagnostics.process]::start($procInfo)
sleep -Milliseconds 3000
$p.StandardInput.WriteLine("ls")