我正在编写一个脚本,循环遍历大量IP地址,每个telnet,发送登录信息,然后发送命令退出。然后它检查日志文件中是否有某个字符串,如果该字符串被包含,则输出“它是一个UPS!”如果不包含字符串,则为“非UPS”。截至目前,该脚本对一个小错误执行精美的execpt,我无法让telnet会话返回到下一次迭代的命令提示符。如果我在telnet会话断开连接后按下回车键(或任何键),脚本将继续进行下一次迭代,但我似乎无法让脚本自动发送该键击。这是代码:
脚本入口点:
@echo off
FOR %%i IN (10.40.9.131 10.40.1.205) DO logtest.bat %%i
logtest.bat:
@echo off
cscript SendKeys.vbs
telnet %1 -f diditwork.txt
find /c "User" diditwork.txt
if errorlevel 1 goto notfound
echo Tis a UPS
goto done
:notfound
echo not a ups
goto done
:done
SendKeys.vbs:
set OBJECT=WScript.CreateObject("WScript.Shell")
WScript.sleep 100
OBJECT.SendKeys "apc{ENTER}"
WScript.sleep 50
OBJECT.SendKeys "apc{ENTER}"
WScript.sleep 50
OBJECT.SendKeys "4{ENTER}"
WScript.sleep 50
OBJECT.SendKeys "quit{ENTER}"
WScript.sleep 50
OBJECT.SendKeys "{ENTER}"
WScript.sleep 50
答案 0 :(得分:0)
尝试使用telnet open
和 close
等命令
telnet
for each address
open x.x.x.x
do stuff
close
quit
答案 1 :(得分:0)
答案 2 :(得分:0)
Google就此而言,为Windows提供了一个可编写脚本的telnet工具。
Telnet Scripting Tool v.1.0
作者:Albert Yale ay@aci.qc.ca http://ay.home.ml.org/
答案 3 :(得分:0)
我找到了一种方法来收集我使用ProcessID打开的每个TELNET窗口的PID。然后,我可以使用该TELNET会话ID引用特定窗口并捕获焦点,因此当我使用SendKeys输入命令时,它会将它们输入到正确的窗口(大多数时间)。我的情况需要同时打开多个TELNET窗口。
(找到你的帖子寻找一种移动/调整窗口大小的方法,但我还是认为我会分享:)
当我激活窗口时,我会这样开始:
Dim Shell, Network
Dim telnet_session01
Dim telnet_session02
Set Shell = WScript.CreateObject("WScript.Shell")
Set Network = WScript.CreateObject("WScript.Network")
Set telnet_session01 = Shell.Exec("""C:\Program Files\Winodws\telnet.exe"" HOST_NAME")
WScript.Sleep 2000
Shell.AppActivate telnet_session01.ProcessID
然后我有一个sub来调用ProcessID并传递字符串:
DelayedSendKeysWithFocus telnet_session01, "username"
DelayedSendKeysWithFocus telnet_session01, "password"
Sub DelayedSendKeysWithFocus(procid, str)
'#! I have not observed consistent behavior while including the Process ID
'#! with this SUB - the focus is not always retrained on the window in
'#! question before each SendKeys.
WScript.Sleep 100
Shell.AppActivate procid
Shell.SendKeys str
End Sub
HTH
罗伯特