【TTL】はじめてのTTLマクロ 7 ホスト名一致確認
はじめに
ログ取得対象のNW機器はプロンプトにホスト名が表示されるようになっている。そのため、ログイン先のホスト名と、batに記載されたホスト名が一致していることをチェックする。これにより、ログイン先アドレスの誤りを検知可能になる。
logget.bat
引数の7番目にホスト名(CEN-M-RT-001)を指定する。
@echo off
mkdir log
C:\work\logget\conf\teraterm-5.2\ttpmacro.exe C:\work\logget\logget.ttl CEN-M-RT-001.log 192.168.11.111 rpass epass ruser CEN-M-RT-001 command.txt
logget.ttl
プロンプト(CEN-M-RT-001#)の末尾1文字を削除して、これがホスト名と一致するか確認する。
また、今後waitするためのプロンプト(CEN-M-RT-001#)を作成する。※"#"のみでwaitすると、descriptionやshow process cpu historyなどの"#"が反応してコマンドが取得できないことがあるので注意が必要。
;------------------------------------------------------------------------------
;変数設定
;------------------------------------------------------------------------------
;debugモードで動かすか選択
numDebugFlag = 1 ; 1:debugモード 0:通常モード
if numDebugFlag = 1 messagebox "debugModeOn" "debug"
;フォルダ名・ファイル名を設定
strIniFileName = ".\TERATERM.INI"
;プロンプト回り
strConnectText = ""
strLogFileName = params[2]
strIP = params[3]
strLoginPass = params[4]
strEnablePass = params[5]
strLoginUser = params[6]
strHostname = params[7]
;------------------------------------------------------------------------------
;メインルーチン
;------------------------------------------------------------------------------
:mainRoutin
;機器にログインしてログ取得
(略)
call funcCheckHostname
(略)
;----------------------------------------------------------------------------
;hostnameを取得して一致確認
;----------------------------------------------------------------------------
:funcCheckHostname
if numDebugFlag = 1 messagebox "funcCheckHostname" "debug"
; プロンプトを取得 (hostname#のこと)
flushrecv
sendln
sendln ; 2回送らないと2回目のrecvlnで止まる
recvln ; エコーバックを読み捨てる
recvln ; 実行結果を取得(inputstrに格納される)
if numDebugFlag = 1 messagebox inputstr "debug funcCheckHostname inputstr"
; プロンプトからホスト名を取得
strscan inputstr "#" ; "hostname#"の何文字目に"#"があるかがresultに入る
strcopy inputstr 1 (result - 1) strTemp ; strTempに"hostname"が入る
if numDebugFlag = 1 messagebox strTemp "debug funcCheckHostname strTemp"
;hostnameの一致確認し、不一致だったらエラー出して終了
strscan strHostname strTemp
if result = 0 then
TmpStr = ''
strconcat TmpStr 'ホスト名が違います'
strconcat TmpStr #13#10
strconcat TmpStr 'IP : '
strconcat TmpStr StrIP
strconcat TmpStr #13#10
strconcat TmpStr '誤 : '
strconcat TmpStr StrHostname
strconcat TmpStr #13#10
strconcat TmpStr '正 : '
strconcat TmpStr strTemp
messagebox TmpStr 'ホストネームエラー'
sendln "exit"
endif
;プロンプトの文字列を作成("hostname#"になる)
strPrompto = strHostname
strconcat strPrompto '#'
return