【发布时间】:2020-07-13 08:08:33
【问题描述】:
我正在做一个每天在 Putty 中完成的手动过程,并希望将其自动化。无需人来执行此操作,因为所有键盘输入并非每天都在变化。我正在努力腾出时间来提高生产力,更不用说每天不断地这样做是令人麻木的。该过程需要有人打开Putty(这当然会使用plink),登录(以纯文本形式存储密码和用户名很好,不需要生成密钥的步骤),输入相同的键盘按键,手动输出文件,然后将其保存到网络驱动器文件夹。所以这是一个完全没有必要让别人手动完成的过程,我正在寻找一种方法来完成这个自动化。
目前,这是在 Windows 10 环境中使用的,据我所知,Putty (plink) 是最好的选择。如果有更好的方法,我也可以使用其他 SSH 程序,但我认为这可能是我所做研究的更好途径。我根本没有编写太多脚本,我正在尝试学习一些内容。我需要自动登录 PLINK(完成),然后为我正在访问的服务器中的每个屏幕自动登录多个键盘条目(完成)。本质上,每个屏幕都需要输入预定的键盘键,例如“ENTER”,一些数字 1-10 取决于屏幕,然后当它完成时,我需要将结果打印到文件中,最好是 xlsx,但 csv 或 text 也足够了。
我在下面添加了到目前为止我能够创建的代码。我被困在这一点上,因为 PLINK 不保持可见,因此很难分析问题,并且在运行时光标会一直跳到任何活动窗口。
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "C:\PuTTY\plink.exe 123.server.com -l username -pw password -t{ENTER}"
WScript.Sleep 3000
WshShell.AppActivate "plink.exe"
WScript.Sleep 2000
WshShell.AppActivate "plink.exe"
WshShell.SendKeys "{ENTER}"
WScript.Sleep 6000
WshShell.AppActivate "plink.exe"
WshShell.SendKeys "{ENTER}"
WScript.Sleep 6000
WshShell.AppActivate "plink.exe"
WshShell.SendKeys "command123{ENTER}"
更新
我尝试使用建议的代码,它在自动登录和在服务器中启动应用程序方面确实有效,但它不接受我尝试编码的任何输入。每次使用输入时,都会显示以下消息。请注意,我传递的命令是 100% 正确的,它似乎甚至没有考虑它。该脚本确实将文本输入到正确的字段中,但它只是出错了。
Enter program name (or abbreviation): I don't recognize
that program name. Press <return> for a list of programs."
(我根据建议更新了代码)。
(
echo WEST COAST
timeout /t 5 > nul
echo 09
timeout /t 5 > nul
echo third_screen_keys
) | C:\PuTTY\plink.exe 123.server.com:PORT# -l username -pw password -t
【问题讨论】:
-
你不能把你的输入放到一个文本文件中,然后用这个文件作为 Plink 的输入吗? (没有 VBScript)。
-
我不确定如何对输入文件进行编码。您如何布局命令并将它们彼此分开(每个会话页面一个命令以进入下一个屏幕)?
-
您可能正在寻找类似这样的东西:Wait between sending login and commands to serial port using Plink – 这是关于串行连接,但没关系,概念是一样的(除了使用 SSH,您仍然可以 [并且应该]使用命令行参数登录并仅将输入文件用于其余部分)。
-
感谢您的参考,但我认为该示例与我的示例有些不同。我是脚本新手,请原谅我的无知。
-
好吧,我相信这正是您想要的。如果您不这么认为,请说明原因。
标签: vbscript scripting putty wsh plink