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にすると追記モードで開きます。