我正在尝试创建一个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连接,它完全变得混乱。在一次特别“错误”尝试之后,请参阅下面的屏幕截图。
我已经尝试在每个命令之间加一个延迟并且它是相应的{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运行,我将不得不想出一个更好的脚本来处理这个特定的操作。
sw.AppActivate "%WinTitle%"
地方%WinTitle%
是砰砰窗口标题的第一个连接后在的SendKeys puttying不会帮助前的实际价值?如果没有,我想知道SSH会话是否滞后并且使用sendkeys只是没有发送到终端或任何有滞后的事情。
restat
而不是restart
- 缺少最后一个r
,但不是最后一个t
字符),遗憾的是,在命令之后等待不会解决发送。