带有SendKeys的VBScript中出现意外行为


1

我正在尝试创建一个VBScript,我可以从计划任务运行以重新启动我们的SonicWall防火墙。防火墙是一种“低端”商业模式(TZ400),我经常不得不重新启动它,因为我们的互联网连接似乎陷入困境(这是我以后需要研究的另一个问题)。

我在另一个站点上找到以下代码,plink.exe用于我的环境并对其进行修改:

Set sw= CreateObject("WScript.Shell")
sw.run"C:\plink\path\Plink.exe -ssh adminuser@X.X.X.X -pw adminpassword"
WScript.Sleep 500

sw.SendKeys "restart"
sw.SendKeys "{Enter}"
WScript.Sleep 800

sw.SendKeys "yes"
sw.SendKeys "{Enter}"
WScript.Sleep 10000

sw.SendKeys "exit"
sw.SendKeys "{Enter}"

不幸的是,当我运行这个脚本时,它似乎跳过了SendKeys方法调用中的一些字符。如果我从我的机器(Windows 7)运行它,我通常可以让它传递“足够”的字符以完成操作,但是当我尝试在服务器上运行相同的脚本时(Windows Server 2008 R2 - 我已经通过RDP连接,它完全变得混乱。在一次特别“错误”尝试之后,请参阅下面的屏幕截图。

来自VBScript的plink会话

我已经尝试在每个命令之间加一个延迟并且它是相应的{ENTER},但这似乎使它变得更糟。我已经尝试将文本括在括号中,以防万一它与方法调用的语法有关,但这也无济于事。

据我所知,似乎命令提示符SendKeys由于某种原因根本无法“跟上”该方法。有没有其他人经历过这个问题,有没有人建议避免或绕过它的最佳方法?例如,有没有办法以某种方式“减慢”脚本的执行速度?在此先感谢您的任何建议。


编辑:我已经能够通过改变脚本来在服务器上成功执行脚本,以便在每个字符之间分别发送100毫秒的睡眠时间:

Set sw= CreateObject("WScript.Shell")
sw.run"C:\plink\path\Plink.exe -ssh adminuser@X.X.X.X -pw adminpassword"
WScript.Sleep 500

sw.SendKeys "r"
WScript.Sleep 100
sw.SendKeys "e"
WScript.Sleep 100
sw.SendKeys "s"
WScript.Sleep 100
sw.SendKeys "t"
WScript.Sleep 100
sw.SendKeys "a"
WScript.Sleep 100
sw.SendKeys "r"
WScript.Sleep 100
sw.SendKeys "t"
WScript.Sleep 100
sw.SendKeys "{Enter}"
WScript.Sleep 800

sw.SendKeys "y"
WScript.Sleep 100
sw.SendKeys "e"
WScript.Sleep 100
sw.SendKeys "s"
WScript.Sleep 100
sw.SendKeys "{Enter}"
WScript.Sleep 10000

sw.SendKeys "e"
WScript.Sleep 100
sw.SendKeys "x"
WScript.Sleep 100
sw.SendKeys "i"
WScript.Sleep 100
sw.SendKeys "t"
WScript.Sleep 100
sw.SendKeys "{Enter}"

wScript.quit

虽然这种解决方法似乎有效,但似乎有点“蛮力”并且实际上并没有解决任何潜在的问题,所以我仍然对任何想法或建议感兴趣。

注意:虽然这允许我从命令行手动运行VBScript,但我仍然遇到从计划任务运行它的问题。它似乎开始和结束,但防火墙实际上从未重新开始。 没关系......我知道为什么它没有从Scheduled Task运行,我将不得不想出一个更好的脚本来处理这个特定的操作。


感谢您的建议,但是,正如我在我的问题中所述,我尝试了但没有成功。此外,如果你注意截图,“缺失”字符可以在单词的中间(restat而不是restart- 缺少最后一个r,但不是最后一个t字符),遗憾的是,在命令之后等待不会解决发送。
G_Hosa_Phat

1
啊,我必须看看那个。。。我猜想做一个sw.AppActivate "%WinTitle%"地方%WinTitle%是砰砰窗口标题的第一个连接后在的SendKeys puttying不会帮助前的实际价值?如果没有,我想知道SSH会话是否滞后并且使用sendkeys只是没有发送到终端或任何有滞后的事情。
Pimp Juice IT

我没试过,但是当我明天回到办公室时,我当然可以试一试。
G_Hosa_Phat

1
是的,不用担心,我已经编写了很多脚本使用sendkey函数和批处理,甚至一些使用PowerShell以防任何帮助,这里有一个列表:superuser.com/...随时浏览和探讨以防任何有用的我认为。
Pimp Juice IT

1
看看这篇文章,以防它至少有助于解决重启问题:sonicwall.com/en-us/support/knowledge-base/170502775276425
Pimp Juice IT
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.