6
4

More than 5 years have passed since last update.

Teraterm マクロでコマンドの結果をファイルに保存する

Posted at

背景など

ネットワークストレージのディスク容量を毎月取る必要に迫られたものの、windows のバッチファイルで telnet など使えないため手作業でログ取りをしています。
teraterm マクロをタスクスケジューラに仕込めば簡単になると聞いて、teraterm マクロについて調べてみました。

teraterm マクロの実行方法

実行ファイル ttpmacro.exe の引数に、マクロを記述したファイルを与えることで実行できます。
具体的には以下のような設定になります(タスクにそのまま登録しても良いですが)。

get_disk.bat
"C:\Program Files\teraterm-4.78\ttpmacro.exe" /V "C:\scripts\teraterm\get_disk.ttl"

マクロを記述したファイルの拡張子は ttl が使われることが多いようです。

注意するべき点として、普段使用している ttermpro.exe との混同があります。マクロの実行には ttermpro.exe ではなく ttpmacro.exe を使います。

マクロ

inputstrresult はシステム変数であり、strscanrecvln を実行すると値が書き換えられます。

df -k を送信すると、結果が複数行で返ってくるのでプロンプト $ が見つかるまで recvln を繰り返しています。
送信したコマンドの結果に $ が含まれる場合、この方法では全ての結果を取得できません。

; 変数の定義
timeout=2 ; 2 秒でタイムアウト
servername='hoge'
ipaddr='192.168.XXX.ZZZ'
port='23'
username='user'
password='pass'
filename='Disk_'
logdir='C:\Temp'


; 変数の加工・構築
strconcat filename servername
strconcat ipaddr ':'
strconcat ipaddr port
strconcat ipaddr ' /nossh /T=1'


; 接続開始 ログイン
connect ipaddr
wait ':'
sendln username
wait ':'
sendln password


; コマンド結果の記録開始
changedir logdir
fileopen handle filename 0; 上書きモード

setsync 1 ; 同期モードの開始
wait '$' ; プロンプトが返ってくるのを待つ

sendln 'df -k';
recvln; エコーバックの読み捨て

result=1
recvln
strscan inputstr '$'
while result=0
    filewriteln handle inputstr
    recvln
    strscan inputstr '$'
endwhile

setsync 0

sendln 'exit'

所感

泥臭い感じですね。batファイルと良い勝負してると思います。
system.net.sockets.tcpclient などで telnet を使ってみると wait とか案外面倒だと分かりました。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4