こんにちは、しーるです。
TeraTerm Macro についてです。
ログを引っ張って書き出し、そのままVBSへ渡して解析、形成、メール送信とかしていましたが、久しぶりに触ると忘れているものですね。
ということで、TeraTerm macroのテンプレレベルでのコマンド覚書です。
準備
・拡張子「TTL」は「C:\Program Files (x86)\teraterm\ttpmacro.exe」へ関連付けを行います。
※インストール途中で関連付けをするかどうかの画面も出ます。
・インストール後は「設定」→「端末設定」から文字コードを「UTF-8」へします。(しないと日本語が文字化けします)
マクロファイルはメモ帳で作成して、拡張子変更で問題ありません。
サーバーやルーターへ接続
; Telnet login macro for Tera Term
;=====================================================================
; 接続情報
HOSTADDR = ‘127.0.0.1’
USERNAME = ‘root’
getpassword ‘C:\TeraTermMacro\password.dat’ ‘passwordname’ Password
;=====================================================================
COMMAND = HOSTADDR
strconcat COMMAND ‘:22 /ssh /2 /auth=password /user=’
strconcat COMMAND USERNAME
strconcat COMMAND ‘ /passwd=’
strconcat COMMAND Password
; 接続
connect COMMAND
・コメントアウトは「;」です。
・「HOSTADDR」など流用が出来るように変数を作って格納します。
・パスワードですが、そのまま書いてもよいのですがセキュリティ上ぱっとわからないように暗号化して保存します。一番最後の「Password」にpasswordnameと紐づいたパスワードが保存され流用できます。
passwordnameは router1 とか ServerName とか対応する名前を適切に決めます。
・「strconcat」は文字列結合で利用です。
・「connect」は出来上がった内容で起動、接続します。
待ちと入力
wait ‘username@servername:~$’
sendln ‘sudo su -‘
wait ‘[sudo] password for username:’
sendln Password
・「wait」は指定の文字列が表示されるまで待ちます。基本コンソールに表示される文字列のコピーで大丈夫です。
・「sendln」は指定の文字列を入力しエンターをします。もし改行が不要な場合は「wait」にします。
関数(サブプログラム)
call subpg
:subpg
wait ‘’
return
・「call」で呼び出すブログラムを指定します。
プログラムを分けることで、処理を見やすくして、プログラムの流用をしやすくします。
ログの取得
finame = ‘C:\logs\authfail_temp.txt’
logautoclosemode 1
;## log 取得 ##
logopen finame 1 0
・「logautoclosemode」はマクロが終了後ログファイルを自動で閉じます。最後に「logclose」を書くのを忘れるといけないので最初に書くほうが良いです。
・「1 0」の1は全て出力します。0は既存のファイルがあれば上書きし、1にすると追記します。
VBSの起動
;# vbsの起動と渡す変数設定
vbspath = ‘wscript.exe C:\TERATERMMACRO\logchecker.vbs ‘
strconcat vbspath data1
strconcat vbspath ‘ ‘
strconcat vbspath data2
exec vbspath
・VBSに限らず「exec」でプログラムを起動できます。
・「data1」等は引数設定です。
・ログを取得して、VBSやPowerShellで解析というのも良いです。またルーチンワークだとログ形成も役に立ちます。
TTLの分割
hensu.ttl
uname = ‘username’
main.ttl
include ‘hensu.ttl’
・「main.ttl」から「include」で呼び出します。そのまま「main.ttl」へ結合されるようなイメージで良いです。
・ユーザーがプログラムに明るくなくても、分離することで容易に扱えるようになります。
メッセージを表示
messagebox ‘メッセージ’ ‘タイトル’
・関数の中身や処理終了等に使います。
繰り返し処理 (例として10回繰り返し)
i = 10
while i
sendln ”
i = i-1
endwhile
for i 1 10
sendln ”
next
i = 10
do while i > 0
sendln ”
i = i ? 1
loop
i = 1
until i > 10
sendln ”
i = i + 1
enduntil
このようなループから抜けるには「break」を使います。キーボードショートカットは「ALT + B」です。
if文とresult(connectの結果が入っています)
if result == 0 then
; TeraTermとリンクされていない
elseif result == 1 then
; ホストへ接続していないが、TeraTermとリンクしている
elseif result == 2 then
; ホストへ接続していて、TeraTermとリンクしている
endif
配列処理
intdim intarray 3 ; 3つの要素数を持つ数値配列を宣言
intarray[0] = 123
intarray[1] = 456
intarray[2] = 789
intarray[3] = 123 ; オーバーしているのでエラーになる
ボックス関連
yesnobox ‘内容’ ‘タイトル’
if result == 0 then
; 「いいえ」ボタンが押された場合の処理
elseif == 1 then
; 「はい」ボタンが押された場合の処理
endif
inputbox ‘メッセージ’ ‘タイトル’ ‘初期値(省略可能)’