お疲れ様です、kouです。
今日は、僕が最近しくじったteratermマクロについて紹介します。
ちなみに、僕はインフラエンジニアになって2020年5月で丸4年のペーペーです。
はじめに。
今回、僕が説明したいことを先に書いておきます。
ズバリ、「TeraTermマクロをWindowsのタスクスケジューラで実行するときに、
以下で説明することをやっておかないと動きませんよ。」
というものです。
正直以下のサイトにまるっきし載っています。(笑)
タスクスケジューラでTTLファイルが動作しません
https://social.technet.microsoft.com/Forums/ja-JP/99440ed7-08bf-40f4-b6f7-c06a1b577bf3/12479124731246312473124651247212517125401252112391ttl1250112449?forum=w7itprogeneralja
2020.04.23 更新!!
もう一つ大事な点があったので、こちら↓に書いています。
これも必須です。
TeraTermマクロとは?
知っている人は、読み飛ばしてください。
インフラエンジニアなら特に、TeraTermは必ず使うソフトウェアだと思います。
今のところ、TeraTermを知らないインフラエンジニアを僕は知りません(笑)
もちろん、インフラエンジニアとしてこれから仕事する人は知らないかもしれません。
これを機に使ってみてくれると、幸いです。
前置きが少し長くなりましたが、TeraTermはもっぱらサーバやNW機器のリモート接続に使用します。
対象の機器のそばに行かずとも、SSHやTelnetといったプロトコルを使用してリモート接続して機器を操作することができます。
さらに、そのTeraTerm上の接続や接続後の操作を自動化することもできます。
それが「TeraTermマクロ」です。
Officeのエクセルにもマクロって、自動化するための機能もありますよね。
ちなみに、今回の内容でTeraTermのインストール方法やマクロの操作方法は説明していません。
あくまで、マクロをタスクスケジューラから実行するときに注意点です。
どういった状況?
今回は、作成したTeraTermマクロのプログラム(.ttlファイル)を、
Windowsのタスクスケジューラ上で実行することを想定しています。
僕の例だと、ESXiサーバにTeraTermでSSH接続を自動化するマクロファイルを作っておいて、
それを呼び出すバッチファイル(.bat)をタスクスケジューラにて定義します。
↓の図をイメージします。
結論:接続コマンドにひと手間加えます。
TeraTermマクロの中で、SSH接続するコマンドは以下のようになります。
connect {ホスト名}:22 /ssh2 /auth=password /user={ユーザ名} /passwd={パスワード}
でも多くの人は、以下のサイトの方のように、
コマンドを細かくつなげて書いたほうがわかりやすくて使っているみたいです。
TeraTermマクロを使うには?
http://www.illinternet.com/2017/06/17/teraterm%E3%83%9E%E3%82%AF%E3%83%AD%E3%82%92%E4%BD%BF%E3%81%86%E3%81%AB%E3%81%AF%EF%BC%9F/
これに!
「/V」というオプションを追加します。
つまり!
connect /V {ホスト名}:22 /ssh2 /auth=password /user={ユーザ名} /passwd={パスワード}
と、なります。
この「/V」オプションは、ウインドウを表示しないで実行するという意味みたいです。
これをしないとどうなるの?
↑で紹介したことをしないと、いざタスクを実行すると、
タスクが「実行中」のまま、変化しません。
実際にはteratermが接続できませんでしたよー!って、エラーのウインドウが出ている状態です。
手動でマクロを実行したときは、そのエラーのウインドウで、OKとか終了みたいなボタンを押せば、
消えるのですが、タスクスケジューラから実行すると、ウインドウがまったく表示されません。
これは、teratermマクロに限ったものではなく、バッチファイルとか実行するものすべてです。
だから、タスクは実行中になっているけど、エラーを消せないのです・・・
めっちゃ不便・・・
だから、タスクスケジューラで実行したものはウインドウが表示されないよ、ってWindowsの仕様なのに、
TeraTerm上で「/V」オプション無しだと、ウインドウ表示するよ、っという合って状態はよくないということです。
おわりに
まあ、言われてみればそうだよねっていうような内容です。
でも、実際に初めてこの問題に遭遇したときに、そこでエラーになっているかどうかなんてわからないですよね!
タスクは実行中のままだし、Windowsのイベントログにエラーを出力するわけでもないし。。。
ちなみに、僕ははじめて遭遇した時は本番作業でタスクスケジューラを実行したときでした(笑)
正直、焦りました・・・なんで実行中のままうんともすんとも言わんのや・・・と(笑)
まあ、本当は開発環境などで検証をきちんとしておかないといけなかったんですけどね。。
でもこういうことがあったので、今こうしてブログに偉そうに書いています。
もし、同じようなところでつまづいた人の助けになれば幸いです!
今回は以上です。
ここまで読んでくださり、ありがとうございました。
コメント