【问题标题】:How to write a script to automate Putty (PLINK) on Windows 10如何编写脚本以在 Windows 10 上自动化 Putty (PLINK)
【发布时间】: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


【解决方案1】:

这里有一个相当相似的问题:
Wait between sending login and commands to serial port using Plink

所以你应该可以像这样使用批处理文件:

(
  echo first_screen_keys
  timeout /t 5 > nul
  echo second_screen_keys
  timeout /t 5 > nul
  echo third_screen_keys
) | C:\PuTTY\plink.exe 123.server.com -l username -pw password -t

(或 PowerShell 等效项,如果您 *nix CR 行结尾)

【讨论】:

  • 如何对密钥进行编码,就像像 {ENTER] 或 {1} 这样封装的 wscript 一样?另外,运行 plink 的命令不会出现在您输入的代码之前吗?例如,采用这种格式: C:\PuTTY\plink.exe 123.server.com -l username -pw password -t | (echo first_screen_keys timeout /t 5 > nul echo second_screen_keys timeout /t 5 > nul echo third_screen_keys )
  • 每一行后面都隐含Enter。如果您想在代码中看到显式输入,最好使用 PowerShell 代码。 – 不,命令应该是这样的。
  • 谢谢马丁,我现在在这方面取得了一些进展。你知道我将如何发送使用回车键的命令吗?登录 PLINK 后,第一页需要按 ENTER 键
  • 如果您只想发送Enter,之前没有任何键/字母,只需发送echo.(这是发送空行=回车的批处理文件技巧)。
  • 马丁,感谢您的回复。我有它回应我的输入,但我有一个输入是西海岸。该输入表示它无法识别。但是,它似乎正确添加了文本输入,服务器只是不接受它。这是因为服务器是基于 UNIX 的吗?它是在读取一些我没有看到的隐形字符吗?
猜你喜欢
  • 2012-09-26
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 2013-02-12
相关资源
最近更新 更多