SecureCRT对于每一位网工来说并不陌生,相信每个网工的电脑上肯定都装着这款软件。以前刚开始玩的时候觉得就是普通的仿真终端程序而已,其实它软件还有更加强大的脚本功能,SecureCRT可以支持VBScript、JAVAscript、Python/ target=_blank class=infotextkey>Python脚本语言等等。通过脚本我可以来拓展更多丰富的功能,比如可以通过脚本实现自动化的命令执行。
刚巧社区里面的小伙伴最近在做一个大项目,有上百台交换机配置需要收集。刚好最近有研究,于是就搞起来了。 今天我们来说说如何使用SecureCRT制作一个自动化批量巡检交换机的脚本,这里我们用VBScript脚本语言来制作,官方对这个支持的也挺好的,还有帮助文档,而且网上关于用VBScript编写CRT脚本的教程也很多,遇到问题还可以百度下。通过脚本自动化的执行提升工作效率,在也不用自己来搬砖了。
制作脚本;
这里我们以cisco交换机为例子,讲解下没段代码的含义,然后您可以根据附件提供的代码根据下面的教程自己进行修改脚本,适应自己的环境。脚本适用于可以通过CRT登陆设备,比如华三、华为交换机或在linux操作系统。
1、首先我们需要让脚本来自动帮我们登录交换机并进入到enable模式,请看下面的脚本:
crt.Screen.WAItForString ("Username:") ‘等待字符串Username出现,区分大小写
crt.screen.Send("cisco")&chr(13) ‘发送字符串cisco并回车
crt.Screen.WaitForString "Password: "
crt.Screen.Send "cisco" & chr(13)
crt.Screen.WaitForString ">"
crt.Screen.Send "en" & chr(13)
crt.Screen.WaitForString "Password: "
crt.Screen.Send "cisco" & chr(13)
注:设备的账号密码可以在上面的脚本中修改发送的字符串即可
2、通常我们都会在crt界面点击记录会话日志,这里我们就不需要手动,用脚本就解决了。
crt.session.LogFileName="192.168.1.1.log" ‘设置记录的日志文件名称
crt.session.Log(true) ‘开始记录日志
3、通常需要我们来手敲的命令,用下面的脚本就可以让crt自己敲起来了。
crt.Screen.Send "show clock" & chr(13)
crt.Screen.WaitForString "#"
crt.Screen.Send "show running-config" & chr(13)
nextmore ‘调用自定义函数
crt.Screen.Send "show version" & chr(13)
nextmore ‘调用自定义函数
那么如果想加入其它命令怎么办呢?直接在这块脚本上附加上下面的代码即可。
crt.Screen.Send "show vlan" & chr(13)
crt.Screen.WaitForString "#"
如果输出内容较多会出现more,只要稍作修改,调用我们自定义的函数即可。
crt.Screen.Send "show vlan" & chr(13)
nextmore
4、我们知道当crt界面不能输出所有信息的时候,就会出现“—more—”的字符串,这个时候需要手动执行空格或者回车查看更多的内容,但是因为设备的不通需要执行的空格数量又不确定,于是我们这里就编写一个循环语句,当遇到More字符串出现的时候就自动发送空格。由于很多命令都会出现类似的情况,于是我们可以将整循环编写为一个函数,用于调用即可。以简化我们的代码。
编写函数:
Function nextmore
do while ( crt.screen.waitforstring("--More--",3)=true)
crt.screen.Send(chr(32))
loop
End Function
脚本含义:当3秒内等等到字符串"--More--"的出现则执行下面的语句发送一个chr(32)(空格键的ASCII值),while判断条件成立执行,不成立则退出循环。
5、关闭日志记录,当然这个操作我们也可以自动化。
crt.screen.waitforstring("#")
crt.session.Log(false)
注:当等待到“#”出现,也就是命令都执行完毕后,停止日志记录。
6、登录下一台交换机执行上面操作,一台设备的所有操作都做完,下面我们要让这些脚本自动一台一台的去执行。这里我们就需要再次用到循环语句。
for i=1 to 254 ‘循环从1到254依次循环,i的值会自动递增
dim ip ‘创建变量ip
ip="192.168.1."&i ‘定义变量,作为IP地址,ip随着循环变化而变
crt.screen.Send("te.NET "&ip)&chr(13) ‘telnet登录交换机
'判断是否telnet成功,如果31秒内出现Username登录则执行下面语句
if(crt.Screen.WaitForString ("Username:",31)=true) then
'下面语句为条件成立后执行的语句内容
crt.session.LogFileName=ip&".log" ‘以IP地址作为日志的文件名
crt.session.Log(true)
。。。。
end if ‘if语句结束
next ‘和for循环对应,执行下一次循环
脚本知识
crt.Screen.Send 发送一个字符串
crt.Screen.WaitForString 等待字符串出现,如果匹配到字符串后执行下面的操作
chr(13) 这是回车键的ASCII码值
chr(32) 这是空格键的ASCII码值
& VBScript里面的连接字符串连接符
' 注释行符号,在文本前打上英文的单引号后,表示此行语句不被执行
Do...Loop 语句
运行循环,当条件为 true 或者直到条件为 true 时。
Do while(判断条件)
执行语句
Loop
For...Next 语句
运行一段语句指定的次数
For i=1 to 254
执行语句
Next
IF语句
假如你希望在条件为 true 时执行一系列的代码,可以使用这个语句。
If (判断条件) then
执行语句
End if
如果还有不明白的地方可以跟帖回复,或者百度下去学习下VBScript脚本语言,脚本语言比较简单,短时间可以学会基础,有基础了搞个crt脚本是没问题的。