ネットワーク

Teratermマクロの接続エラー処理|testlinkで接続失敗を検知する

Teratermマクロの connect は、接続に失敗してもマクロが止まりません。そのまま後続の sendln が実行され、コマンドがどこにも送られないまま処理が進んでしまいます。testlink を使って接続結果を判定しましょう。

testlinkとは

現在のTeraTermの接続状態を調べ、結果を result に格納するコマンドです。

testlink

resultの値

状態
0 TeraTermとリンクしていない
1 リンクしているが、接続はしていない
2 リンクしていて、接続もしている

接続が成功しているのは result が2のときだけです。

基本の書き方

connect '1.1.1.1:22 /ssh /auth=password /user=admin /passwd=test'

testlink
pause 2
if result <> 2 then
  messagebox "接続できませんでした。" "接続エラー"
  end
endif

接続に失敗した場合、メッセージボックスを表示してマクロを終了します。

pauseを入れる理由

connect の直後に testlink を実行すると、まだ接続処理が完了しておらず、成功していても2以外が返ることがあります。pause 2 で2秒待ってから判定してください。

環境によっては2秒でも足りないことがあります。接続は成功しているのにエラーになる場合は、待ち時間を増やしてみてください。

pause 5

複数台に接続する場合の書き方

複数台をループで処理する場合、1台失敗しただけで全体を止めると困ります。その機器をスキップして次へ進む書き方はこうなります。

testlink
pause 2
if result <> 2 then
  ; ログに失敗を記録して次の機器へ
  sprintf2 msg '%s への接続に失敗しました' HOSTNAME
  messagebox msg "接続エラー"
  continue
endif

メッセージボックスを使わない方法

無人実行するマクロでは、メッセージボックスが出ると誰かがOKを押すまで止まってしまいます。ファイルに記録する方式に変えてください。

testlink
pause 2
if result <> 2 then
  fileopen efh 'error.log' 1
  sprintf2 msg '%s : 接続失敗' HOSTNAME
  filewriteln efh msg
  fileclose efh
  continue
endif

fileopen の第3引数を1にすると追記モードで開きます。

関連記事

-ネットワーク