首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

SecureCRT VBScript 自動化腳本開發指南:核心 API、結構語句與實戰巡檢腳本

     編輯:Java 綜合教學

SecureCRT 腳本自動化:從 VBScript 基礎到網設備批量巡檢實戰

SecureCRT 內置 VBScript 引擎,通過 `crt.Screen`、`crt.Session`、`crt.Dialog` 等對象模型,可實現網絡設備 (交換機/路由器/防火牆) 的自動化登錄、配置下發、巡檢信息采集、日志記錄。本文系統整理核心 API、語句結構並提供完整巡檢腳本模板。

一、 核心對象模型與高頻 API

對象核心方法/屬性用途
crt.ScreenSynchronous = True/False同步模式 (逐字符等待回顯) / 異步。發送命令前設 True,結束設 False。
WaitForString(str, timeout)等待屏幕出現字符串,返回 Boolean。超時秒數可省略 (無限等待)。
WaitForStrings(arr, timeout)多字符串等待,返回匹配索引 (1-based),超時/無匹配返回 0。配合 Select Case 分支。
Send(str)發送字符串到設備。需手動加回車 `& Chr(13)` 或 `vbCr`。
Get(row, col, row2, col2)讀取屏幕指定區域文本 (用於解析輸出)。
crt.SessionConnect("/telnet ip") / Disconnect建立/斷開連接。支持 SSH/Telnet/Serial 協議參數。
LogFileName = "path" / Log(True/False)啟動/停止會話日志記錄。
crt.DialogPrompt(msg, title, default, isPassword)彈窗輸入框 (密碼模式可選),返回字符串或空/取消。
MessageBox(msg, title, buttons+icon)彈窗提示/確認,返回按鈕常量 (IDOK, IDYES...)。
crt.Sleep(ms)腳本級睡眠 (毫秒),等待命令輸出緩沖。

二、 腳本結構語句 (VBScript 子集)

  • 順序:`Sub Main ... End Sub` 入口。
  • 分支:`If ... Then ... ElseIf ... Else ... End If`、`Select Case var Case 1 ... Case Else ... End Select`。
  • 循環:`For i = 1 To 10 ... Next`、`Do While cond ... Loop`、`Do Until cond ... Loop`、`While ... Wend`。
  • 跳出:`Exit Sub` (退出過程)、`Exit For/Do` (退出循環)。無 break/continue 關鍵字。
  • 錯誤處理:`On Error Resume Next` (忽略錯誤繼續) + `Err.Number` 判斷,`On Error Goto 0` 恢復。

三、 實戰模板:AIX 服務器巡檢自動化腳本

功能:交互式輸入 IP/用戶/密碼 → 自動登錄 → 開啟日志 → 批量執行巡檢命令 (硬件、網絡、軟件、存儲、性能、日志) → 完成提示退出。

' ========== 配置常量 ==========
Const ICON_INFO = 64, BUTTON_YESNO = 4, DEFBUTTON2 = 256
Const IDYES = 6, IDNO = 7

' ========== 全局變量 ==========
Dim ip, username, password, logFile

' ========== 輔助函數 ==========
Function ReadName(raf) ' 讀取固定長度字符串並清理空字符
    ' ... 略 ...
End Function

Sub SendCmd(cmd, waitSec)
    crt.Screen.Send cmd & vbCr
    crt.Sleep waitSec * 1000
End Sub

' ========== 核心功能函數 ==========
Function Login()
    crt.Session.Disconnect
    ip = crt.Dialog.Prompt("請輸入服務器IP:", "AIX巡檢", "192.168.1.100", False)
    If ip = "" Then crt.Quit
    username = crt.Dialog.Prompt("用戶名:", "AIX巡檢", "root", False)
    password = crt.Dialog.Prompt("密碼:", "AIX巡檢", "", True) ' 密碼模式
    
    crt.Screen.Synchronous = True
    crt.Session.Connect "/telnet " & ip
    crt.Screen.WaitForString "login:"
    crt.Screen.Send username & vbCr
    crt.Screen.WaitForString "Password:"
    crt.Screen.Send password & vbCr
    
    If crt.Screen.WaitForString("invalid login", 3) Then
        crt.Dialog.MessageBox "登錄失敗", "錯誤", ICON_INFO
        crt.Quit
    End If
    crt.Screen.Synchronous = False
End Function

Function StartLog()
    logFile = crt.Dialog.Prompt("日志保存路徑:", "AIX巡檢", "C:\logs\" & ip & ".log", False)
    crt.Session.LogFileName = logFile
    crt.Session.Log True
End Function

Sub CollectInfo()
    ' 系統基本信息
    SendCmd "hostname", 1
    SendCmd "prtconf | grep 'Machine Serial Number'", 6
    ' 硬件設備
    SendCmd "lsdev -C | grep proc", 2
    SendCmd "lsattr -El mem0", 2
    SendCmd "lsdev -Cc disk", 2
    SendCmd "lsdev -Cc adapter", 2
    ' 網絡
    SendCmd "ifconfig -a", 2
    SendCmd "more /etc/hosts", 2
    ' 軟件/補丁
    SendCmd "uname -a", 2
    SendCmd "oslevel -s", 5
    SendCmd "instfix -i | grep ML", 10
    ' 存儲/文件系統
    SendCmd "lsvg", 2
    SendCmd "lsvg -o", 2
    SendCmd "lsvg -l rootvg", 2
    SendCmd "df -g", 2
    ' 日志/性能
    SendCmd "errpt", 2
    SendCmd "errpt -a", 2
    SendCmd "sysdumpdev -l", 2
    SendCmd "lsps -a", 2
    SendCmd "vmstat 2 10", 25
    SendCmd "iostat 2 10", 25
End Sub

' ========== 主入口 ==========
Sub Main
    Call Login
    Call StartLog
    Call CollectInfo
    
    Dim result
    result = crt.Dialog.MessageBox("巡檢完成,是否退出 SecureCRT?", "完成", ICON_INFO + BUTTON_YESNO + DEFBUTTON2)
    If result = IDYES Then crt.Quit
    crt.Session.Log False
End Sub

四、 開發調試技巧

  1. 腳本錄製器:`Script → Start Recording` 手動操作一次,生成基礎代碼框架,再提取關鍵 `WaitForString`/`Send` 序列。
  2. 調試輸出:使用 `crt.Dialog.MessageBox` 或寫入日志文件 (`CreateObject("Scripting.FileSystemObject")`) 追蹤變量值。
  3. 編碼問題:腳本文件保存為 **ANSI (GBK)** 或 **UTF-8 with BOM**,避免中文亂碼導致 `WaitForString` 匹配失敗。
  4. 超時策略:關鍵命令設置合理 `WaitForString` 超時,防止腳本卡死;長耗時命令 (如 `vmstat 2 10`) 用 `Sleep` 估算時間。

五、 進階擴展方向

  • 多設備並發:VBScript 單線程,可寫 `.wsf` (Windows Script File) 封裝多 `.vbs` 任務,或用 Python/Paramiko 替代實現真正並發 SSH。
  • 數據解析入庫:`crt.Screen.Get` 讀取屏幕區域 → 正則解析關鍵指標 → 寫入 CSV/資料庫,構建 CMDB 資產巡檢數據源。
  • 配置下發:構建命令模板數組,循環 `SendCmd` 實現批量配置變更 (需極高謹慎,建議先干跑/模擬環境驗證)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved