SecureCRT 內置 VBScript 引擎,通過 crt.Screen、crt.Session、crt.Dialog 等對象模型,可實現網絡設備批量配置、巡檢、日誌歸檔等全自動化運維。本文系統梳理核心 API、腳本結構與實戰案例。
| 方法 | 說明 | 典型用法 |
|---|---|---|
WaitForString(str, timeout) | 等待單一關鍵字出現,返回 Boolean | crt.Screen.WaitForString("Password:", 10) |
WaitForStrings(arr, timeout) | 等待多關鍵字任一出現,返回索引(1-based),超時返回 0 | idx = crt.Screen.WaitForStrings(Array("cisco","huawei"), 5) |
Send(str) | 發送字符串(需手動加 Chr(13) 回車) | crt.Screen.Send "conf t" & Chr(13) |
Synchronous = True | 開啟同步模式(逐字符等待),必開,否則 WaitForString 失效 | 腳本開頭 crt.Screen.Synchronous = True |
Connect("/telnet 192.168.1.1") / Connect("/ssh user@host")Disconnect 斷開LogFileName = "path.log" + Log(True) 開啟日誌記錄Log(False) 關閉日誌Prompt("提示", "標題", "默認值", False):輸入框(密碼框用 True)。MessageBox("內容", "標題", 按鈕圖標常量組合):彈窗確認。ICON_INFO=64, BUTTON_YESNO=4, IDYES=6, IDNO=7 等。' 1. 順序結構:自動登錄示例
Sub Main
crt.Screen.Synchronous = True
crt.Session.Connect "/telnet 192.168.0.2"
crt.Screen.WaitForString "login:", 10
crt.Screen.Send "admin" & Chr(13)
crt.Screen.WaitForString "Password:", 10
crt.Screen.Send "secret" & Chr(13)
End Sub
' 2. 選擇結構:設備廠商識別
idx = crt.Screen.WaitForStrings(Array("cisco","huawei","H3C"), 5)
Select Case idx
Case 1: MsgBox "思科設備"
Case 2: MsgBox "華為設備"
Case 3: MsgBox "華三設備"
Case Else: MsgBox "未知設備"
End Select
' 3. 循環結構:批量巡檢 IP 列表
For Each ip In Array("10.0.0.1","10.0.0.2","10.0.0.3")
' ... 連接並執行命令 ...
Next
' ========== 全局常量區 ==========
Const ICON_INFO = 64, BUTTON_YESNO = 4, IDYES = 6, IDNO = 7
' ========== 輔助函數區 ==========
Function Login
ip = crt.Dialog.Prompt("服務器IP:", "AIX", "192.1.1.207", False)
If Trim(ip) = "" Then crt.Quit
username = crt.Dialog.Prompt("用戶名:", "AIX", "root", False)
passwd = crt.Dialog.Prompt("密碼:", "AIX", "congine", True) ' True=密碼框
crt.Screen.Synchronous = True
crt.Session.Connect "/telnet " & ip
crt.Screen.WaitForString "login:"
crt.Screen.Send username & Chr(13)
crt.Screen.WaitForString "Password:"
crt.Screen.Send passwd & Chr(13)
If crt.Screen.WaitForString("invalid login", 3) Then
crt.Dialog.MessageBox "登錄失敗", "錯誤", ICON_INFO
crt.Quit
End If
End Function
Function WriteLog
logFile = crt.Dialog.Prompt("日誌路徑:", "AIX", "c:\" & ip & ".log", False)
crt.Session.LogFileName = logFile
crt.Session.Log True
End Function
Function SendCmd(cmd, waitSec)
crt.Screen.Send Chr(13) & Chr(13) ' 換行確保提示符
crt.Screen.Send cmd & Chr(13)
crt.Sleep waitSec * 1000
End Function
Function GetInfo
SendCmd "hostname", 1
SendCmd "prtconf |grep 'Machine Serial Number'", 6
SendCmd "lsdev -C |grep proc", 2
SendCmd "lsattr -El mem0", 2
SendCmd "df -g", 2
SendCmd "errpt -a", 2
SendCmd "vmstat 2 10", 25
SendCmd "iostat 2 10", 25
End Function
' ========== 主入口 ==========
Sub Main
Login
WriteLog
GetInfo
If crt.Dialog.MessageBox("採集完成,退出CRT?", "提示", ICON_INFO + BUTTON_YESNO) = IDYES Then
crt.Quit
End If
crt.Session.Log False
End Sub
WaitForString 前設置 crt.Screen.Synchronous = True,結束前設 False。On Error Resume Next + 寫入獨立錯誤日誌,避免單台失敗阻塞整批。crt.API 供外部程序調用,構建自動化平台。show 輸出轉 JSON,入庫分析、合規檢查。掌握 SecureCRT 腳本,能將重複性運維工作效率提升 10 倍以上,是網絡工程師向「網絡自動化工程師」轉型的敲門磚。