问题背景
经常碰到TELNET登陆终端重复执行相同或类似的命令,单靠手工输入命令执行费时费力,效率低下,工作枯燥。
问题分析
如果将命令能够通过脚本自动执行,会大大提高工作效率。而且脚本易于维护和扩充,对于回归测试是非常有用的利器。
以下讨论一种使用Windows Script Host脚本自动TELNET登陆终端、自动执行命令、自动退出登陆的方法。
Windows Script Host是一种支持ActiveX(COM)的独立脚本语言。WSH(Windows Script Host简称)脚本程序本来是为了替代DOS时代的批处理文件而产生的,后来由于WSH的应用很广泛,已经不只是局限于批处理的替代品了。从Windows98开始,操作系统就已经自带了WSH,因此在Windows98或以上的操作系统中,可以不安装任何软件就能直接使用WSH。WSH可以使用VBscript与Jscript,即使用的脚本语言与网页脚本是一样的。WSH文件的扩展名为vbs及js,分别用VBscript与Jscript作为编程脚本语言。
WSH文件都可以直接在Windows中双击运行,他们关联的执行文件是wscript.exe文件。另外执行脚本的程序还有一个,它是cscript.exe,是一个可以在DOS下运行的程序。当然DOS下运行的程序与Windows的大部分功能是相同的,只是稍微有点不同,如同样是Wscript.Echo输出语句,wscript.exe的结果是以窗口方式显示,而cscript.exe是以标准控制台方式输出,并可以进行DOS改向。
问题解决
首先,我们建立一个vbs脚本,这里用telnet 到129.0.0.1 UNIX服务器为例,相关内容可以修改。假设Vbs脚本文件名称为tel.vbs,内容如下:
'建立Shell对象
set sh=WScript.CreateObject("WScript.Shell")
WScript.Sleep 1000
'启动telnet,注意要保证telnet.exe程序所在的路径如c:/winnt/system32在path环境变量中
sh.Run  "telnet.exe"
WScript.Sleep 1000
'向telnet发送我们平时录入的命令
sh.SendKeys "open 129.0.0.1"
WScript.Sleep 1000
sh.SendKeys "{ENTER}"
WScript.Sleep 1000
'发送登陆用户User
sh.SendKeys "User{ENTER}"
WScript.Sleep 1000
'发送登陆密码pass
sh.SendKeys "pass{ENTER}"
WScript.Sleep 1000
'运行相关命令pwd
sh.SendKeys "pwd{ENTER}"
'运行退出TELNET登陆命令
sh.SendKeys "quit{ENTER}"
我们只需要双击运行tel.vbs脚本就可以轻松搞定自动telnet批量运行命令的工作了。
SendKeys这个命令对于普通可视字符可以直接输入,对于特殊字符如回车、括号等可以参考以下列表组合输入:
BACKSPACE {BACKSPACE}, {BS}, or {BKSP}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
DEL or Delete {Delete} or {DEL}
DOWN ARROW {DOWN}
END {END}
ENTER {ENTER}or ~
ESC {ESC}
HELP {HELP}
HOME {HOME}
INS or Insert {Insert} or {INS}
LEFT ARROW {LEFT}
NUM LOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
PRINT SCREEN {PRTSC}
RIGHT ARROW {RIGHT}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
UP ARROW {UP}
F1 {F1}
F2 {F2}
F3 {F3}
F4 {F4}
F5 {F5}
F6 {F6}
F7 {F7}
F8 {F8}
F9 {F9}
F10 {F10}
F11 {F11}
F12 {F12}
F13 {F13}
F14 {F14}
F15 {F15}
F16 {F16}
SHIFT +
CTRL ^
ALT %
再看一个实例,比如想批量执行的命令格式是Hello(WORD w1,WORD w2,BYTE b1 ),输入执行命令时,左括号'('的输入方法是SHIFT和9的组合键,所以应输入'+9';右括号')'的输入方法是SHIFT和0的组合键,所以应输入'+0'。如 w1=400,w2=1,b1=0 :Hello(400,1,0 ):
'运行命令
sh.SendKeys "Hello+9400,1, 0+0{ENTER}"