您的位置:首页 > 其它

SecureCRT批量处理脚本

2014-02-17 09:36 489 查看
主脚本文件如下:# $language = "VBScript"
# $interface = "1.0"'==========================================================================
' NAME: uploadcfg for Xiamen Haichang MAN
' AUTHOR: TonyPu
'==========================================================================Sub MainConst username = "guest" ' Username to use for loginConst password = "tonypu.cn" ' Password for corresponding userConst DEVICE_FILE_PATH = "Devices.txt"Dim fsoSet fso = CreateObject("Scripting.FileSystemObject")Dim filSet fil = fso.OpenTextFile(DEVICE_FILE_PATH)Dim ipDim nameDim protocolDim lineDim cnxnStringWhile Not fil.AtEndOfStreamline = fil.ReadLinename = Split(line, ";")(0)ip = Split(line, ";")(1)port = Split(line, ";")(2)protocol = Split(line, ";")(3)devicetype = Split(line, ";")(4)Select Case protocolCase "Telnet"cnxnString = "/TELNET " & ip & " "& portEnd Select'Logcrt.Session.LogFileName = name & "_" & devicetype & "_log.txt"crt.Session.Log True' Connectcrt.Screen.Synchronous = True

On Error Resume Nextcrt.session.Connect cnxnStringIf Err.Number<>0 Thencrt.Session.Log "Connect failed"crt.Screen.Synchronous = Falsecrt.Session.Log Falseelseif devicetype="7600" thencrt.Screen.WaitForStrings("RETURN")crt.Screen.Send vbCrcrt.Screen.WaitForString "User:"crt.Screen.Send username & vbCrcrt.Screen.WaitForString "Password:"crt.Screen.Send password & vbCr
crt.Screen.WaitForString ">"crt.Screen.Send "en" & vbCrcrt.Screen.WaitForString "#"crt.Screen.Send "copy startup to tftp://1.1.1.1/" & name & "_" & devicetype & ".txt" & vbCrcrt.Screen.Send "sh ip route" & chr(13)crt.Screen.WaitForString "- More: m,<space> - Quit: q - One line: <return> - Search(10000 lines): s,/ -"crt.Screen.Send " "crt.Screen.Send vbCrcrt.Screen.WaitForString "#"crt.Screen.Synchronous = Falsecrt.Session.Disconnect

crt.Session.Log False'else if devicetype="8500" then'else if devicetype="6500" thenend ifEnd IfWendfil.CloseEnd Sub__________________________________________________________________________________________Device.txttest;1.1.1.1;23;Telnet;7600
test2;1.1.1.2;23;Telnet;7600
test3;1.1.1.3;23;Telnet;7600
test4;1.1.1.4;23;Telnet;7600
=======================================================================
#$language = "VBScript"
#$interface = "1.0"

' This automatically generated script may need to be
' edited in order to work correctly.

Sub Main
Const DEVICE_FILE_PATH = "d:\devices.txt"
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim f
Set f = fso.OpenTextFile(DEVICE_FILE_PATH)
Dim line, params
Do Until f.AtEndOfStream
line = f.Readline
params = Split(line)

crt.Window.Show 0
crt.session.Connect "/telnet " & params(0) & " " & params(1)
crt.Screen.Synchronous = True
crt.Session.LogFileName = "d:\%H.txt"
crt.Session.Log True
crt.Screen.WaitForString "ogin:"
crt.Screen.Send params(2) & chr(13)
crt.Screen.WaitForString "Password: "
crt.Screen.Send params(3) & chr(13)
crt.Screen.WaitForString "$ "
crt.Screen.Send "date" & chr(13)
crt.Screen.WaitForString "$ "
crt.Screen.Send "front/bin/getresult.sh" & chr(13)
crt.Screen.WaitForString "$ "
crt.Session.Log False
crt.Screen.Send "exit" & chr(13)
crt.Screen.Synchronous = False
crt.Session.Disconnect
Loop
f.Close
End Sub

=======================================================================================

先telnet到某台访问服务器,或某个设备后执行此脚本,需要适当修改一下,帮朋友做的,比较仓促,有兴趣的可适当增强^_^,调用ipaddr.txt,内容为每个IP地址一行# $language = "VBScript"
# $interface = "1.0"

Const ForReading = 1
Sub main

Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("ipaddr.txt", ForReading, 0)
Dim line, params
Do Until f.AtEndOfStream
line = f.Readline
params = Split( line )
crt.Screen.Send "telnet " & params(0) & " " & vbCR
'telnet后等待的提示,输入指定的用户名 crt.Screen.WaitForString "Username:"
crt.Screen.Send "cisco" & VbCr
'telnet后等待的提示,输入指定的密码
crt.Screen.WaitForString "Password:"
crt.Screen.Send "cisco" & VbCr
'等待交互信息并输入指令
crt.Screen.WaitForString ">"
crt.Screen.Send "en" & VbCr
crt.Screen.WaitForString "Password:"
crt.Screen.Send "cisco" & VbCr
crt.Screen.WaitForString "#"
crt.Screen.Send "copy run tftp://1.1.1.1/config" & params(0) & ".txt " & VbCr
crt.Screen.Send VbCr
crt.Screen.Send VbCr
crt.Screen.Send VbCr
crt.Screen.Send "quit" & VbCr
'看到返回访问服务器的提示后继续下一次循环
crt.Screen.WaitForString "AS#"
Loop
End Sub

作为维护CE设备的一个普通工程师,可能会有同样的问题困惑着我们——如何对众多的CE设备进行有效的巡检和维护管理?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 ("current state : UP",1)<>False) Then
portStatus="PortUP"
Else
portStatus="PortDown"
End Ifmsgbox portStatus这段代码用于判断端口状态情况并记录下来.第二:crt.Screen.WaitForStrings("KeyString1","KeyString2",...,timeout)用于多个字符串的判断,timeout的作用是一样的。例如:crt.Screen.WaitForStrings("cisco","huawei","H3C",5)意思就是在5秒内有检测到相应的字符时,返回相应的索引号(索引号是从1开始的)。如果都没有检查到,则返回0.因此,该函数的使用可以如下:Dim SwitchKeySwitchKey=crt.Screen.WaitForStrings("cisco","huawei","H3C",5)Select case SwitchKeycase 1MsgBox "思科设备"case 2MsgBox "华为设备"case 3MsgBox "华三设备"case elseMsgBox "未知设备"End Select
=====================================================================================================
下面就我的工作性质,跟我同事一块制作的一个脚本程序——维护着N台路由器设备,每天需要对这些设备进行例行巡检。下面是程序的所有代码,希望对各位有所帮助********************************************************************************************************************************************************************************************************************#$language = "VBScript"
#$interface = "1.0"'说明:
'本代码可在CRT工具中实现Cosico,华为,爱立信路由器交换机数据的自动配置或作为设备巡检之用;Set screen = crt.Screen '创建屏幕对象
'定义全局变量:
'Device变量为操作设备对象数组,作为存储设备名用;
'CiscoAggreOfCommands变量为思科设备命令集合数组,作为存储思科设备命令用;
'NE40EAggreOfCommands变量为华为NE40E设备命令集数组,作为存储华为NE设备命令用;
'SE800AggreOfCommands变量为爱立信SE800设备命令集数组,作为存储爱立信SE800设备命令用;
'ArrreOfRiskCommands变量为各厂家设备存在风险性操作命令的数组,作为存储过滤风险操作命令之用;
'DeviceNumth变量为Device数组序号;
'CommandNumth变量为各厂家命令数组的序号;
'ResultOfType变量为判断设备类型标识符;
'TypeOfCommand变量作为存储当前命令类型用;
Dim Device,CiscoAggreOfCommands,NE40EAggreOfCommands,SE800AggreOfCommands,ArrreOfRiskCommands
Dim DeviceNumth , CommandNumth ,ResultOfType
Dim TypeOfCommand
'爱立信设备集合
'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("show cdp",_
"show conf",_
"show hard",_
"show interface",_
"show ip route",_
"show conf")'华为NE40E设备命令集合
'健康检查
'告警检查
'日志检查
'单板运行状态检查
'CPU占用率检查
'内存占用率检查
'接口和链路状态以及流量检查
'NE40E接口状态检查
'OSPF邻居状态检查
'路由信息检查
NE40EAggreOfCommands = Array("display health",_
"display trapbuffer",_
"display logbuffer",_
"display device",_
"display cpu-usage",_
"display memory-usage",_
"display interface",_
"dis ospf peer",_
"display ip routing-table")
'爱立信SE800设备命令集合
'单板注册信息
'办卡加电自检
'单板运行状态检查
'检查背板运行状态
'检查主控板冗余性
'存储设备利用率
'CPU利用率
'内存利用率检查
'端口运行状态检查
'端口数据收发状态检查
'电源使用情况检查
'检查OSPF状态
SE800AggreOfCommands = Array("show chassis",_
"show diag on-demand detail",_
"show hardware",_
"show backplane-status",_
"show redundancy",_
"show disk",_
"show process",_
"show memory",_
"show port detail",_
"show port counters detail",_
"show chassis power",_
"context ChinaMobile_NGN_SG",_
"show ospf neighbor",_
"context ChinaMobile_NGN_Media",_
"show ospf neighbor")'风险命令过滤集合
ArreOfRiskCommands = Array("reb","rel")'CE汇聚网管平台登陆子函数
Function LandIPNET
screen.Send ""&chr(13)
screen.WaitForString "ogin:"
screen.Send "XXXXXXXXXX" & chr(13)
screen.WaitForString "Password:"
screen.Send "XXXXXXXXXX"& chr(13)
End Function'各厂家设备选择登陆子函数
Function LandDevice
screen.Send ""&chr(13)
screen.WaitForString "Console>>"
screen.Send "open " & Device(DeviceNumth)
ResultOfType = screen.WaitForStrings("Cisco","NE40E","SE800",4)
If ResultOfType = 1 Then
TypeOfCommand = CiscoAggreOfCommands
'CommandNumth=0
ElseIf ResultOfType = 2 Then
TypeOfCommand = NE40EAggreOfCommands
'CommandNumth=0
ElseIf ResultOfType = 3 Then
TypeOfCommand = SE800AggreOfCommands
'CommandNumth=0
Else
MsgBox "Error Type Of Device"
Do
Loop
End If
screen.Send ""&chr(13)
screen.WaitForStrings "Username:","ogin:"
screen.send "XXXXXXXXXX"& chr(13)
screen.WaitForString "Password:"
screen.Send "XXXXXXXXXX"& chr(13)
Do
Loop Until (screen.WaitForStrings("NE40E>","SE800#",5)<>False)
End Function'退出设备子函数
Function ExitDevice
If ResultOfType = 1 Then
ElseIf ResultOfType = 2 Then
screen.Send " "&"quit" & chr(13)
Do
screen.Send ""&chr(13)
Loop Until (screen.WaitForString("Console>>",1)<>False)
ElseIf ResultOfType = 3 Then
screen.Send " "&"exit" & chr(13)
Do
screen.Send ""&chr(13)
Loop Until (screen.WaitForString("Console>>",1)<>False)
Else
End If
End Function
Function ShowAll
Do while (screen.WaitForStrings("More","more",3)<>False)
crt.Screen.Send " "
Loop
End Function'风险命令过滤子函数
Function RiskCommands
Dim result
result = screen.WaitForStrings(ArreOfRiskCommands,1)
If result <> False Then
MsgBox "The command you are importing exists risk!"
Do
Loop
End If
End FunctionSub Main
crt.Screen.Synchronous = True
LandIPNET
For DeviceNumth=LBound(Device) To UBound(Device)
LandDevice
CommandNumth=0
For CommandNumth = LBound(TypeOfCommand) To UBound(TypeOfCommand)
screen.Send " "&TypeOfCommand(CommandNumth)
RiskCommands
screen.Send "" & chr(13)
ShowAll
If screen.WaitForString("More",1)<>False Then ShowAll
crt.Sleep 4000
screen.Send "" & chr(13)
Next
ExitDevice
Next
crt.Screen.Synchronous = False
End Sub
======================================================================================================#$language = "VBScript"
#$interface = "1.0"

Sub Main
If crt.Arguments.Count <> 4 Then
Exit Sub
End If

On Error Resume Next
crt.Window.Show 0
crt.session.Connect "/telnet " & crt.Arguments(0) & " " & crt.Arguments(1)
crt.Screen.Synchronous = True
crt.Session.LogFileName = "d:\%H.txt"
crt.Session.Log True

If Err.Number<>0 Then
crt.Session.Log "Connect failed"
crt.Screen.Synchronous = False
crt.Session.Log False
Exit Sub
End If

crt.Screen.WaitForString "ogin:"
crt.Screen.Send crt.Arguments(2) & chr(13)
crt.Screen.WaitForString "Password: "
crt.Screen.Send crt.Arguments(3) & chr(13)
crt.Screen.WaitForString "$ "
crt.Screen.Send "date" & chr(13)
crt.Screen.WaitForString "$ "
crt.Screen.Send "front/bin/getresult.sh" & chr(13)
crt.Screen.WaitForString "$ "
crt.Session.Log False
crt.Screen.Send "exit" & chr(13)
crt.Screen.Synchronous = False
crt.Session.Disconnect
End Sub

SecureCRT.EXE /script d:/collect_args.vbs /ARG 1111.222.33.44 /ARG 23 /ARG username /ARG password
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  脚本 SecureCRT interface