SecureCRT腳本


編寫腳本要添加頭文件

#$Language="VBScript"

#$Interface="1.0"

 

腳本里面如果有主函數main()的話,就會從主函數開始執行,

 

但是不是所有語句必須要求放在主函數里面。例如主函數外部的初始化變量語句。

 

Exit Sub 對出腳本的執行。

 

腳本使用的幾個步驟

1) Connect to the remote machine.(telnet到目標板)

2) Start script recording.(開始錄制腳本)(錄制腳本用完整的敲入命令為好,不使用自動補齊,例如tab鍵等)

3) Perform commands to be recorded.(手動在telnet中敲入命令)

4) Stop script recording.(停止錄制腳本)

5) Specify a filename in which to save the recorded script code.(保存錄制好的腳本)

6) Review and edit the recorded script file.(查看和編輯腳本)

 

常用ASCII字符,ASCII值為8、9、10 和13 分別轉換為退格、制表、換行和回車字符

 

 

 

 

 

 

 

 

 

 

 

 

 

 

一個很好的例子(包括變量聲明、循環、判斷、輸入輸出)

作為維護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

其實SecureCRT支持的腳本語言就是VBS,這個腳本語言與VB有較大的不同,對於界面的支持性較差。不過也有幾個對話性的函數

1、InputBox :提示用戶輸入參數

temp = inputbox("提示用戶你輸入參數的名稱","對話框的名稱") :需要將輸入的參數賦值給某一個參數進行使用。

2、輸出函數 msgbox

msgbox “給用戶輸出的信息對話框”

eg.求正方形面積的腳本

dim r,s
r=inputbox("請輸入正方形的邊長:","求正方形面積的程序")
s=r*r
msgbox(s)

 

下面就我的工作性質,跟我同事一塊制作的一個腳本程序——維護着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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM