1

我有一个批处理文件,它启动一个 telnet 会话并使用 vbs 脚本执行一些命令:

start telnet.exe another.hostname
timeout /t 1 /nobreak > NUL
cscript c:\scripts\sendtelnet.vbs 1

我的 vbs 脚本如下所示:

WScript.sleep 1000
arg = Wscript.Arguments.Item(0)
WScript.sleep 1000
cmd = "RUN CMD D "&arg&"{ENTER}"
WScript.sleep 1000
set OBJECT=WScript.CreateObject("WScript.Shell")
WScript.sleep 6000
OBJECT.SendKeys "administrator{ENTER}" 
WScript.sleep 200
OBJECT.SendKeys "mypass{ENTER}"
WScript.sleep 200
OBJECT.SendKeys cmd
WScript.sleep 5000
OBJECT.SendKeys "QUIT{ENTER}" 
WScript.sleep 500 
OBJECT.SendKeys "{ENTER}" 
WScript.sleep 100 
OBJECT.SendKeys " "

我可以运行这个测试大约 10 次,但它只会在 10 次中运行大约 8 次。我目睹了测试失败,发生的情况是 telnet 窗口打开了,但它挂在“用户名”提示符上,最终 telnet 会话超时并且窗口永远不会关闭。

为什么这只有时会起作用?我是否需要增加睡眠时间?我试着睡了 6000 毫秒,它似乎足够长了。我一直在尝试很多东西,但我一直卡在这部分,我愿意在这一点上尝试任何东西,请任何建议?

4

1 回答 1

2

Telnet 本身就是不稳定的。手动登录交换机或路由器时,我不时会遇到类似的行为。尝试登录和退出 telnet 服务器 10-20 次,看看它是否在用户名提示下挂起。我不认为你的脚本应该受到责备,尽管 vbscript 中的 sendkeys 方法还是很糟糕。它仅在某些情况下和特定条件下有效。我建议把

object.appactivate ("C:\windows\system32\telnet.exe") 

在你的 vbscript 之前

cmd = "RUN CMD D "&arg&"{ENTER}"

也是。这样,您至少知道击键将进入正确的窗口。您可能想看看AutoIT。将密钥发送到 Windows 更加健壮。

于 2013-04-23T16:08:50.583 回答