我有一个启动 telnet session 并使用 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 session 超时并且窗口永远不会关闭。
为什么这只在某些时候有效?我是否需要增加 sleep 时间?我试过休眠 6000 毫秒,似乎已经足够长了。我一直在尝试很多事情,但我一直卡在这部分,我愿意在这一点上尝试任何事情,请给我任何建议?
最佳答案
Telnet 本身就不稳定。手动登录交换机或路由器时,我时常会遇到类似的行为。尝试登录和退出 telnet 服务器 10-20 次,看看它是否卡在用户名提示符处。我不认为你的脚本是罪魁祸首,尽管 vbscript 中的 sendkeys 方法无论如何都很糟糕。它只在某些时候和特定条件下起作用。我建议把
object.appactivate ("C:\windows\system32\telnet.exe")
在你之前的 vbscript 中
cmd = "RUN CMD D "&arg&"{ENTER}"
还有。这样你至少知道击键会转到正确的窗口。你可能想看看 AutoIT .将 key 发送到 Windows 更加可靠。
关于Windows 批处理文件无法始终如一地工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16173315/