とりあえず作成してみただけ。

未検証

 

;==============================================================================
; プログラム特殊変数

; サブルーチンの引数
Param1 = ''
Param2 = ''
Param3 = ''
Param4 = ''
Param5 = ''

; サブルーチンの戻り値
RetValue = 0
ErrorMessage = ''
;==============================================================================

;==============================================================================
; グローバル変数

; Config取得対象一覧
ConfigList = ''
ConfigListCount = 0

;==============================================================================

; 初期設定
call Setup

; メイン処理の呼び出し
call Main
end


;==============================================================================
; Configの取得(SR-Sシリーズ)
; - 各メーカ・機種毎にカスタマイズする
;
; @param Param1     ホスト名
; @return RetValue  0:成功 1:エラー
;==============================================================================
:GetConfig_SRS
    call InitFunc

    ; 引数取得
    HostName = Param1

    ; 接続情報
    SSH_UserName = ''
    SSH_Password = ''
    UserName = ''
    Password = ''

    ; SSH接続
    Param1 = HostName
    Param2 = SSH_UserName
    Param3 = SSH_Password
    call ConnectSSHForPass
    if RetValue <> 0 then
        call Disconnect
        return
    endif

    ; 入力キーボード抑制
    enablekeyb 0

    ; ログ開始
    getdate Today '%y%m%d-%H%M%S_'
    strconcat Today HostName
    strconcat Today '.log'

    ; ###############################
    ; ネットワーク機器で実行するコマンド
    
    ; ネットワーク機器ログイン
    wait 'User:'
    sendln UserName

    wait 'Password:'
    sendln Password

    ; ページャ無効
    wait '>'
    sendln ''
    sendln 'terminal pager disable'

    ; Config取得
    wait '>'
    sendln ''
    sendln 'show running-config all'

    ; 切断
    Param1 = 'logout'
    Disconnect

    ; ##############################

    ; キーボード入力抑制解除
    enablekeyb 1

    return

;==============================================================================
; Configの取得(Cisco)
; - 各メーカ・機種毎にカスタマイズする
;
; @param Param1     ホスト名
; @return RetValue  0:成功 1:エラー
;==============================================================================
:GetConfig_Cisco
    call InitFunc

    ; 引数取得
    HostName = Param1

    ; 接続情報
    SSH_UserName = ''
    SSH_Password = ''
    EnPassword = ''

    ; SSH接続
    Param1 = HostName
    Param2 = SSH_UserName
    Param3 = SSH_Password
    call ConnectSSHForPass
    if RetValue <> 0 then
        call Disconnect
        return
    endif

    ; キーボード入力抑制
    enablekeyb 0

    ; ログ開始
    getdate Today '%y%m%d-%H%M%S_'
    strconcat Today HostName
    strconcat Today '.log'

    ; ###############################
    ; ネットワーク機器で実行するコマンド
    wait '>'
    sendln ''

    ; ネットワーク機器ログイン
    sendln 'enable'
    wait 'Password:'
    sendln EnPassword

    ; ページャ無効
    wait '#'
    sendln ''
    sendln 'terminal length 0'
    wait '#'

    ; Config取得
    sendln 'sh run'
    wait '#'

    ; 切断
    Param1 = 'logout'
    Disconnect

    ; ##############################

    ; キーボード入力抑制解除
    enablekeyb 1

    return

;==============================================================================
; メイン処理
;==============================================================================

:Main
    call InitFunc

    ; Config取得対象一覧の取得
    call LoadList
    if RetValue = 0
    else
        messagebox ErrorMessage '確認'
        return
    endif

    ; Configの取得
    MaxCount = ConfigListCount -1
    for idx 0 MaxCount
        Param1 = ConfigList[idx]

        ; 各ハード用のconfig収集コマンド実行
        call GetConfig
    next
    return

;==============================================================================
; 初期設定
;  ・処理ディレクトリを現在のディレクトリに変更する
;
; @return なし
;==============================================================================
:Setup
    call InitFunc

    ; ディレクトリの変更
    getdir Dir
    setdir Dir
    changedir Dir

    return

;==============================================================================
; Config収集対象一覧の取得
;
; 読み込み結果は「ConfigList」に格納する
; データ数は「ConfigListCount」に格納する
;
; configファイル
; 「ホスト名,ユーザ名,パスワード」
;
; @return RetValue 0:成功 -1:キャンセル -2:データ0件 -3:最大数超過
;==============================================================================
:LoadList
    call InitFunc

    ConfigListCount = 0
    filenamebox 'Config一覧ファイルを選択してください' ''
    if result = 0 then
        RetValue = -1
    else
        FileName = result

        ; データ数の走査
        fileopen fileHandle FileName
        while 1
            filereadln fileHandle Param1
            call Trim Param1
            Line = Param1

            strlen Line
            if result > 0 then
                ConfigListCount = ConfigListCount + 1
            endif

            ; データ数が65536を超過した場合はエラー
            if ConfigListCount > 65536 then
                break
            endif

            if result = 1 break
        endwhile
        fileclose fileHandle

        ; データをConfigListに読み込む
        if ConfigListCount = 0 then
            ; データがない
            RetValue = -2
            ErrorMessage = 'データがありません。'
        elseif ConfigListCount > 65536 then
            ; データ数の上限超過
            RetValue = -3
            ErrorMessage = 'データ数が上限(65536)を超過しています。データ数を減らして再度実行してください。'
        else
            strdim ConfigList ConfigListCount
            idx = 0

            ; 正常
            fileopen fileHandle FileName
            while 1
                filereadln fileHandle Param1
                call Trim Param1
                Line = Param1

                strlen Line
                if result > 0 then
                    ConfigListCount = ConfigListCount + 1
                    ConfigList[idx] = Line
                    idx = idx + 1
                endif

                if result = 1 break
            endwhile
            fileclose fileHandle
        endif
    endif
    return

;==============================================================================
; SSH接続を行う(パスワード認証を行う)
;
; @param Param1     ホスト名
; @param Param2     ユーザ名
; @param Param3     パスワード
; @return RetValue 0:成功 負値:エラー
;==============================================================================
:ConnectSSHForPass
    call InitFunc

    HostName = Param1
    UserName = Param2
    Password = Param3

    Command = HostName
    strconcat Command ':22 /ssh /2 /auth=password /user='
    strconcat Command UserName
    strconcat Command ' /passwd'
    strconcat Command Password  
    connect Command 

    if reslut = 0 then
        RetValue = -1
        ErrorMessage = 'Tera Term とリンクされていない。'
    elseif result = 1 then
        RetValue = -2
        ErrorMessage = 'ホストへの接続はされていないが、Tera Term へのリンクはされている。'
    elseif result = 2 then
        RetValue = 0
    endif
    return

;==============================================================================
; 切断する
;
; @param Param1 切断コマンド
;==============================================================================
:Disconnect
    call InitFunc

    Command = Param1

    ; 切断コマンド実行
    sendln Command

    ; ホストと接続されている場合は待つ
    do
        mpause 10
        testlink
    loop while result = 2
    return

;==============================================================================
; 前後の文字を削除する
;
; @param Param1 trimする文字列
;==============================================================================
:Trim 
    call InitFunc

    strtrim Param1 ' '
    strtrim Param1 ' '
    strtrim Param1 '\t'
    return

;==============================================================================
; 戻り値のクリア
;
; サブルーチンの先頭で呼び出す
;==============================================================================
:InitFunc
    RetValue = 0
    ErrorMessage = ''
    return