SecureCRT批量处理脚本

主脚本文件如下:

# $language = "VBScript"
# $interface = "1.0"

'==========================================================================
' NAME: uploadcfg for Xiamen Haichang MAN
' AUTHOR: TonyPu
'==========================================================================

Sub Main

Const username = "guest" ' Username to use for login

Const password = "tonypu.cn" ' Password for corresponding user

Const DEVICE_FILE_PATH = "Devices.txt"

Dim fso

Set fso = CreateObject("Scripting.FileSystemObject")

Dim fil

Set fil = fso.OpenTextFile(DEVICE_FILE_PATH)

Dim ip

Dim name

Dim protocol

Dim line

Dim cnxnString

While Not fil.AtEndOfStream

line = fil.ReadLine

name = Split(line, ";")(0)

ip = Split(line, ";")(1)

port = Split(line, ";")(2)

protocol = Split(line, ";")(3)

devicetype = Split(line, ";")(4)

Select Case protocol

Case "Telnet"

cnxnString = "/TELNET " & ip & " "& port

End Select

'Log

crt.Session.LogFileName = name & "_" & devicetype & "_log.txt"

crt.Session.Log True

' Connect

crt.Screen.Synchronous = True

On Error Resume Next

crt.session.Connect cnxnString

If Err.Number<>0 Then

crt.Session.Log "Connect failed"

crt.Screen.Synchronous = False

crt.Session.Log False

else

if devicetype="7600" then

crt.Screen.WaitForStrings("RETURN")

crt.Screen.Send vbCr

crt.Screen.WaitForString "User:"

crt.Screen.Send username & vbCr

crt.Screen.WaitForString "Password:"

crt.Screen.Send password & vbCr


crt.Screen.WaitForString ">"

crt.Screen.Send "en" & vbCr

crt.Screen.WaitForString "#"

crt.Screen.Send "copy startup to tftp://1.1.1.1/" & name & "_" & devicetype & ".txt" & vbCr

crt.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 vbCr

crt.Screen.WaitForString "#"

crt.Screen.Synchronous = False

crt.Session.Disconnect

crt.Session.Log False

'else if devicetype="8500" then

'else if devicetype="6500" then

end if

End If

Wend

fil.Close

End Sub

__________________________________________________________________________________________

Device.txt

test;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 If

msgbox portStatus

这段代码用于判断端口状态情况并记录下来.

第二: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


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


下面就我的工作性质,跟我同事一块制作的一个脚本程序――维护着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&gt;&gt;"
       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&gt;","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&gt;&gt;",1)<>False)
       ElseIf ResultOfType = 3 Then
           screen.Send "                          "&"exit" & chr(13)
           Do
             screen.Send ""&chr(13)
         Loop Until (screen.WaitForString("Console&gt;&gt;",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 Function
Sub 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,批量处理)