logo资料库

SecureCRT脚本编写方法.pdf

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
SecureCRT脚本编写方法 一、 SecureCRT工具常用到的几个函数阐述如下: 在 SecureCRT里,用得最多的应该就是 crt.Screen,基本上很多操作都是基于屏幕的返回字来决定下 一步该作何操作: 第一: crt.Screen.WaitForString("KeyString",timewaiting) 该函数是单字符串判断, KeyString 是需要查找的关键字, timewaiting 是一个超时阀值,例如: crt.Screen.WaitForString("people:",5)该行代码的意思就是在 5 秒内没有检测到 people:出现,就执行下 一条语句,如果改成: crt.Screen.WaitForString("people:")那就是指直到 people:出现才执行下一行代码 WaitForString 是有返回值的, 返回值是 True或者 False 因此,可以根据返回值进行条件判断以确定一 下条代码 例如: If(crt.Screen.WaitForString("currentstate:UP",1)<>False)Then portStatus="PortUP" Else portStatus="PortDown" EndIf msgboxportStatus 这段代码用于判断端口状态情况并记录下来 . 第二: crt.Screen.WaitForStrings("KeyString1","KeyString2",...,timeout) 用于多个字符串的判断, timeout 的作用是一样的 例如: crt.Screen.WaitForStrings("cisco","huawei","H3C",5) 意思就是在 5 秒内有检测到相应的字符时,返回相应的索引号 (索引号是从 1 开始的) 如果都没有检 查到,则返回 0.因此,该函数的使用可以如下: Dim SwitchKey SwitchKey=crt.Screen.WaitForStrings("cisco","huawei","H3C",5) Select case SwitchKey case 1 MsgBox"思科设备 " case 2 MsgBox"华为设备 " case 3 MsgBox"华三设备 " case else MsgBox"未知设备 " End Select 几个对话性的函数 其实 SecureCRT支持的脚本语言就是 VBS,这个脚本语言与 VB 有较大的不同,对于界面的支持性较 差 不过也有几个对话性的函数 1、InputBox:提示用户输入参数 temp=inputbox(" 提示用户你输入参数的名称 "," 对话框的名称 "):需要将输入的参数赋值给某一个参数 进行使用
2、输出函数 msgbox msgbox“给用户输出的信息对话框” eg.求正方形面积的脚本 dimr,s r=inputbox("请输入正方形的边长 :"," 求正方形面积的程序 ") s=r*r msgbox(s) 巡检代码示例 下面就我的工作性质 ,跟我同事一块制作的一个脚本程序——维护着 N 台路由器设备,每天需要对这 些设备进行例行巡检 下面是程序的所有代码,希望对各位有所帮助 *************************************************************************************** ******************* *************************************************************************************** ******************* #$language="VBScript" #$interface="1.0" '说明: '本代码可在 CRT工具中实现 Cosico,华为,爱立信路由器交换机数据的自动配置或作为设备巡检之 用; Setscreen=crt.Screen'创建屏幕对象 '定义全局变量: 'Device 变量为操作设备对象数组,作为存储设备名用; 'CiscoAggreOfCommands变量为思科设备命令集合数组,作为存储思科设备命令用; 'NE40EAggreOfCommands变量为华为 NE40E设备命令集数组,作为存储华为 NE设备命令用; 'SE800AggreOfCommands变量为爱立信 SE800设备命令集数组,作为存储爱立信 SE800设备命令用; 'ArrreOfRiskCommands变量为各厂家设备存在风险性操作命令的数组,作为存储过滤风险操作命令之 用; 'DeviceNumth 变量为 Device数组序号; 'CommandNumth 变量为各厂家命令数组的序号; 'ResultOfType变量为判断设备类型标识符; 'TypeOfCommand变量作为存储当前命令类型用; DimDevice,CiscoAggreOfCommands,NE40EAggreOfCommands,SE800AggreOfCommands,ArrreOfRiskComm ands DimDeviceNumth,CommandNumth,ResultOfType DimTypeOfCommand '爱立信设备集合 'Device=Array("CE35-ERICSE800","CE36-ERICSE800","CE37-ERICSE800","CE38-ERICSE800") '华为设备集合 Device=Array("CE07-HWNE40E","CE08-HWNE40E",_
"CE09-HWNE40E","CE10-HWNE40E",_ "CE11-HWNE40E","CE12-HWNE40E",_ "CE21-HWNE40E","CE22-HWNE40E",_ "CE23-HWNE40E","CE24-HWNE40E",_ "CE25-HWNE40E","CE26-HWNE40E",_ "CE29-HWNE40E","CE30-HWNE40E",_ "CE33-HWNE40E","CE34-HWNE40E",_ "CE45-HWNE40E","CE46-HWNE40E",_ "CE47-HWNE40E","CE48-HWNE40E",_ "CE49-HWNE40E","CE50-HWNE40E") '思科设备命令集合 CiscoAggreOfCommands=Array("showcdp",_ "showconf",_ "showhard",_ "showinterface",_ "showiproute",_ "showconf") '华为 NE40E设备命令集合 '健康检查 '告警检查 '日志检查 '单板运行状态检查 'CPU占用率检查 '内存占用率检查 '接口和链路状态以及流量检查 'NE40E接口状态检查 'OSPF邻居状态检查 '路由信息检查 NE40EAggreOfCommands=Array("displayhealth",_ "displaytrapbuffer",_ "displaylogbuffer",_ "displaydevice",_ "displaycpu-usage",_ "displaymemory-usage",_ "displayinterface",_ "disospfpeer",_ "displayiprouting-table") '爱立信 SE800设备命令集合 '单板注册信息 '办卡加电自检 '单板运行状态检查 '检查背板运行状态 '检查主控板冗余性 '存储设备利用率 'CPU利用率 '内存利用率检查 '端口运行状态检查 '端口数据收发状态检查 '电源使用情况检查
'检查 OSPF状态 SE800AggreOfCommands=Array("showchassis",_ "showdiagon-demanddetail",_ "showhardware",_ "showbackplane-status",_ "showredundancy",_ "showdisk",_ "showprocess",_ "showmemory",_ "showportdetail",_ "showportcountersdetail",_ "showchassispower",_ "contextChinaMobile_NGN_SG",_ "showospfneighbor",_ "contextChinaMobile_NGN_Media",_ "showospfneighbor") '风险命令过滤集合 ArreOfRiskCommands=Array("reb","rel") 'CE汇聚网管平台登陆子函数 FunctionLandIPNET screen.Send""&chr(13) screen.WaitForString"ogin:" screen.Send"XXXXXXXXXX"&chr(13) screen.WaitForString"Password:" screen.Send"XXXXXXXXXX"&chr(13) EndFunction '各厂家设备选择登陆子函数 FunctionLandDevice screen.Send""&chr(13) screen.WaitForString"Console>>" screen.Send"open"&Device(DeviceNumth) ResultOfType=screen.WaitForStrings("Cisco","NE40E","SE800",4) IfResultOfType=1Then TypeOfCommand=CiscoAggreOfCommands 'CommandNumth=0 ElseIfResultOfType=2Then TypeOfCommand=NE40EAggreOfCommands 'CommandNumth=0 ElseIfResultOfType=3Then TypeOfCommand=SE800AggreOfCommands 'CommandNumth=0 Else MsgBox"ErrorTypeOfDevice" Do Loop EndIf screen.Send""&chr(13) screen.WaitForStrings"Username:","ogin:" screen.send"XXXXXXXXXX"&chr(13)
screen.WaitForString"Password:" screen.Send"XXXXXXXXXX"&chr(13) Do LoopUntil(screen.WaitForStrings("NE40E>","SE800#",5)<>False) EndFunction '退出设备子函数 FunctionExitDevice IfResultOfType=1Then ElseIfResultOfType=2Then screen.Send""&"quit"&chr(13) Do screen.Send""&chr(13) LoopUntil(screen.WaitForString("Console>>",1)<>False) ElseIfResultOfType=3Then screen.Send""&"exit"&chr(13) Do screen.Send""&chr(13) LoopUntil(screen.WaitForString("Console>>",1)<>False) Else EndIf EndFunction FunctionShowAll Dowhile(screen.WaitForStrings("More","more",3)<>False) crt.Screen.Send"" Loop EndFunction '风险命令过滤子函数 FunctionRiskCommands Dimresult result=screen.WaitForStrings(ArreOfRiskCommands,1) Ifresult<>FalseThen MsgBox"Thecommandyouareimportingexistsrisk!" Do Loop EndIf EndFunction SubMain crt.Screen.Synchronous=True LandIPNET ForDeviceNumth=LBound(Device)ToUBound(Device) LandDevice CommandNumth=0 ForCommandNumth=LBound(TypeOfCommand)ToUBound(TypeOfCommand) screen.Send""&TypeOfCommand(CommandNumth) RiskCommands screen.Send""&chr(13) ShowAll Ifscreen.WaitForString("More",1)<>FalseThenShowAll crt.Sleep4000
screen.Send""&chr(13) Next ExitDevice Next crt.Screen.Synchronous=False EndSub 二、 自动化脚本编写 三段模式模板 从一个文件(目录为 C:\Users\lilf\Desktop\ip.txt )里面自动读取设备 IP 地址,密码等,自动登录设备 进入特权模式 第一种情况:用户名 +密码 +特权密码方式 ”) ip.txt ”,Forreading, False) “Scripting.FileSystemObject # $language = “VBScript ” # $interface = “1.0″ Sub Main ‘打开保存设备管理地址以及密码的文件 Const ForReading = 1, ForWriting = 2, ForAppending = 8 Dim fso,file1,line,params Set fso = CreateObject( Set file1 = fso.OpenTextFile( “C: crt.Screen.Synchronous = True DO While file1.AtEndOfStream <> True ‘读出每行 line = file1.ReadLine ‘分离每行的参数 IP地址 用户名 密码 特权密码 params = Split (line) ‘Telnet到这个设备上 crt.Session.Connect ( ‘输入 telnet 用户名和密码 crt.Screen.WaitForString crt.Screen.Send params(1) & vbcr crt.Screen.WaitForString crt.Screen.Send params(2) & vbcr ‘进特权模式 crt.Screen.Send “enable ” & vbcr ‘输入特权密码 crt.Screen.WaitForString crt.Screen.Send params(3) & vbcr crt.Screen.waitForString ip.txt 里相对应的 IP 地址、用户名、密码、特权密码,分别如下: 192.168.1.1 admin ruijie ruijie 192.168.1.2 admin ruijie ruijie 192.168.2.1 admin ruijie ruijie ,, “/TELNET ” & params(0)) “sername: ” “assword: ” “assword: ” “#”
“Scripting.FileSystemObject ”) “C: ip.txt ”,Forreading, False) 第二种情况:密码 +特权密码方式 # $language = “VBScript ” # $interface = “1.0″ Sub Main ‘打开保存设备管理地址以及密码的文件 Const ForReading = 1, ForWriting = 2, ForAppending = 8 Dim fso,file1,line,params Set fso = CreateObject( Set file1 = fso.OpenTextFile( crt.Screen.Synchronous = True DO While file1.AtEndOfStream <> True ‘读出每行 line = file1.ReadLine ‘分离每行的参数 IP地址 密码 特权密码 params = Split (line) ‘Telnet到这个设备上 crt.Session.Connect ( ‘输入 telnet 密码 crt.Screen.WaitForString crt.Screen.Send params(1) & vbcr ‘进特权模式 crt.Screen.Send “enable ” & vbcr ‘输入特权密码 crt.Screen.WaitForString crt.Screen.Send params(2) & vbcr crt.Screen.waitForString ip.txt 里相对应的 IP 地址、密码、特权密码,分别如下: 192.168.1.1 admin ruijie 192.168.1.2 admin ruijie 192.168.2.1 admin ruijie ,, “/TELNET ” & params(0)) “assword: ” “assword: ” “#” 脚本发送命令: // 这个是回车,并且每行只发送一个命令 “(config)# ” “(config)# ” crt.Screen.Send”要发送的命令” & chr(13) 如下,进入全局模式下,去掉 OSPF进程号 800 crt.Screen.Send “conf t ” & chr(13) crt.Screen.WaitForString crt.Screen.Send “no router ospf 800″ & chr(13) crt.Screen.WaitForString crt.Screen.Send “end” & chr(13) crt.Screen.WaitForString “#” crt.Screen.Send “wr” & chr(13) J 录制好的,复制那些相关的命令 这样不用自己逐条手写了 完成一台设备的操作之后,退出并进入下一台设备 ‘完成后退出 crt.Screen.waitForString “#”,3 crt.Session.Disconnect // 等待 3S后如果没有其它操作,则自动断开 这样去写是相当困难的,所以我们可以用先录制好需要进行相关操作的脚本,打开那个
loop crt.Screen.Synchronous = False End Sub 三、 应用案例 真实场景: “C: “Scripting.FileSystemObject ”) “/TELNET ” & params(0) ip.txt “,Forreading, False) 客户升级,客户有 145 台设备需要升级,其中有 rgos.bin,也有少部分的 rgnos.bin 首先查找当前运行的是 rgos.bin 还是 rgnos.bin 运行脚本,并记录日志到一个文本中,按 2.1.2 图即可 脚本如下: # $language = “VBScript ” # $interface = “1.0″ Sub Main Const ForReading = 1, ForWriting = 2, ForAppending = 8 Dim fso,file1,line,params Set fso = CreateObject( Set file1 = fso.OpenTextFile( crt.Screen.Synchronous = True DO While file1.AtEndOfStream <> True line = file1.ReadLine params = Split (line) crt.Session.Connect crt.Screen.WaitForString crt.Screen.Send params(1) & vbcr crt.Screen.WaitForString crt.Screen.Send params(2) & vbcr crt.Screen.Send “enable ” & vbcr crt.Screen.waitForString crt.Screen.Send “show ver ” & vbcr crt.Screen.WaitForString crt.Screen.Send vbcr crt.Screen.waitForString crt.Session.Disconnect loop crt.Screen.Synchronous = False End Sub C:\Users\lilf\Desktop\ip.txt 中的内容如下 10.243.124.1 XXXX XXXX 10.243.124.10 XXXX XXXX 完成 show ver 后,查看日记记录,找到当前运行的是 rgnos.bin 设备,并把他的 IP 地址从 ip.txt 中去 掉,新建 ip1.txt 升级 rgos.bin: # $language = “VBScript ” # $interface = “1.0″ Sub Main Const ForReading = 1, ForWriting = 2, ForAppending = 8 Dim fso,file1,line,params “#” “#”,3 “sername: ” “assword: ” “#”
分享到:
收藏