【Tera Term マクロ】ログファイル名に接続先ホスト名と実行日時を入れる方法

マクロ

はじめに

ネットワーク機器の状態確認ログを取得するために Tera Term マクロを使用することがよくあります。このとき、Tera Term マクロで出力するログファイルの名前にホスト名やマクロ実行日時を含めるようにしておくと、効率的にログファイルの管理を行うことができます。

ホスト名を取得する方法

ここでいうホスト名とは、Tera Term で接続する際に「ホスト:」として指定する IP アドレスまたはホスト名のことを指しています。

Tera Term マクロでホスト名を取得する関数は gethostname です。

  • gethostname 変数名
    • 変数名 で指定した変数にホスト名が格納される

実行例:

;機器に SSH 接続
connect "10.1.10.254 /ssh /auth=password /user=admin /passwd=hogepass"

;ホスト名取得
gethostname hostname

;取得したホスト名をメッセージボックスで表示
messagebox hostname "gethostname"

上のマクロを実行すると下のメッセージボックスが表示されます。

接続先として指定した IP アドレスを取得できていることが分かります。

関数 messagebox を使用するとメッセージボックスでメッセージを表示することができます。

  • messagebox "表示する文字列" "メッセージボックスのタイトル"

上のマクロ例では、表示する文字列 の部分で変数 hostname を使用しています。

上のマクロ例では変数 hostname を使用しています。変数とは、値を格納する箱のようなもので、以下のような用途があります。

  • 関数の出力結果を格納する
  • 繰り返し使用する値を変数に格納しておくことで値を再利用しやすくする

変数の名前は規則内で任意に決めることができます。詳しくは公式情報参照。

現在日時を取得する方法

Tera Term マクロで現在日時を取得する関数は gettime です。

  • gettime 変数名 [フォーマット]
    • 変数名 で指定した変数に フォーマット で指定した形式で日時が格納される
    • フォーマットを指定しない場合は "HH:MM:SS" の形式となる
    • フォーマット での日時指定方法は以下の通り
      • %Y → yyyy (西暦年)
      • %m → mm (月)
      • %d → dd (日)
      • %H → HH (時)
      • %M → MM (分)
      • %S → SS (秒)

実行例:

;現在日時取得
gettime timestr "%Y/%m/%d %H:%M:%S"

;取得した日時をメッセージボックスで表示
messagebox timestr "gettime"

上のマクロを実行すると下のメッセージボックスが表示されます。

現在日時を取得できていることが分かります。

ログファイル名となる文字列を構築する

Tera Term マクロでログ取得を開始する際に指定するログファイル名を構築します。

例として、ログファイル名を次の名前とします。

  • C:\Users\hoge\Documents\作業ログ\<ホスト名>_yyyymmdd_hhmmss.log

上の文字列を構築するためのマクロは以下の通りです。

;機器に SSH 接続(Telnet でも問題無い)
connect "10.1.10.254 /ssh /auth=password /user=admin /passwd=hogepass"

;ホスト名を取得
gethostname hostname

;現在日時を取得しつつ、ファイル名の一部を構築
gettime timestr "_%Y%m%d_%H%M%S.log"

;文字列を連結してファイル名を構築
logfileName = hostname
strconcat logfileName timestr

;文字列を連結してファイルパスを構築
logfilePath = "C:\Users\hoge\Documents\作業ログ\"
strconcat logfilePath logfileName

;構築したログファイル名をメッセージボックスで表示
messagebox logfilePath "logfilePath"

上のマクロを実行すると下のメッセージボックスが表示されます。

目的の文字列を構築できていることが分かります。

上のマクロ例で使用している関数 strconcat は、文字列変数に文字列を連結する関数です。

  • strconcat 変数名 "文字列"
    • 指定した変数の値が 元の変数の値 + 指定した文字列 になります

ログファイル名となる文字列を構築できたら、あとはそれを logopen で使用するだけです。

;ログ取得を開始する
logopen logfilePath 0 0

;任意のコマンドを実行する(コマンド実行する命令文をここに追記)

;ログ取得を終了する
logclose

マクロファイルの格納先フォルダパスを取得する

ログファイル出力先フォルダを指定する際に、マクロファイルが保存されているフォルダを基準にしたい場合があります。このような場合は、関数 getdir を使用します。

  • getdir 変数名
    • 変数名で指定した変数にマクロファイルの格納先フォルダパスが保存されます

実行例:

;マクロファイルの格納先フォルダパスを取得する
getdir dirstr

;構築したフォルダパスをメッセージボックスで表示
messagebox dirstr "dirstr"

上のマクロを実行すると下のメッセージボックスが表示されます。

マクロファイルの格納先フォルダパスを取得できていることが分かります。

コマンド実行マクロのテンプレート

今回の記事の内容を活用したコマンド実行マクロのテンプレートを記載します。

;機器に SSH 接続
connect "接続先(IP or ホスト名) /ssh /auth=password /user=ユーザ名 /passwd=パスワード"

;ホスト名を取得
gethostname hostname

;現在日時を取得しつつ、ログファイル名の一部を構築(フォーマットは自由に変更)
gettime timestr "_%Y%m%d_%H%M%S.log"

;文字列を連結してログファイル名を構築
logfileName = hostname
strconcat logfileName timestr

;文字列を連結してログファイルパスを構築(マクロファイルの格納先フォルダに保存する場合)
getdir logfilePath
strconcat logfilePath "\"
strconcat logfilePath logfileName

;ログ取得を開始する
logopen logfilePath 0 0

;任意のコマンドを実行する(コマンド実行する命令文をここに追記)

;ログ取得を終了する
logclose

;機器からログアウトする(ログアウトする命令文をここに追記)

コマンドを実行するマクロの作成方法については以下の記事を参照してください。
【Tera Term】機器でコマンドを実行するマクロを作成する

注意事項

Tera Term の設定でログを自動保存する設定になっている場合は、マクロで指定したログ設定は無視され、Tera Term のログ保存設定に基づいてログが保存されるため注意してください。
マクロでログを制御したい場合は、Tera Term の設定でログを自動保存しない設定とした上でマクロを実行してください。

参考資料

https://ttssh2.osdn.jp/manual/4/ja/macro/command/gethostname.html
https://ttssh2.osdn.jp/manual/4/ja/macro/command/gettime.html
https://ttssh2.osdn.jp/manual/4/ja/macro/command/strconcat.html
https://ttssh2.osdn.jp/manual/4/ja/macro/command/getdir.html
https://ttssh2.osdn.jp/manual/4/ja/macro/syntax/identifiers.html

―――――――――――――

タイトルとURLをコピーしました