LoginSignup
0
1

背景

業務の中で複数機器の設定値をまとめて取得したい機会があったので、久々にTeraTermマクロを使って対応してみました。今回作成したマクロベースでTeraTermマクロでのCSVファイルの読み込み/ファイル書き出しを含め、基本的な記述方法をまとめておこうと思います。

利用したもの

  • TeraTerm
  • CSVファイル ※以下が内容のイメージ
HOSTNAME HOSTADDR USERNAME PASSWORD
ホスト名① ホストIP① ユーザ名① パスワード①
ホスト名② ホストIP② ユーザ名② パスワード②
・・・ ・・・ ・・・ ・・・

プログラム

CSVファイルに記載された複数機器の情報をもとに、各装置へログインし、コンフィグを取得するための汎用的なソースコードを以下に記載します。

  • TeraTermマクロ
;-----------------------------------
;変数設定
;-----------------------------------
LOGDIR = 'C:\Users\...\...\config'       ;ログ保存先ディレクトリ
csvfile = 'C:\Users\...\...\target.csv'  ;対象装置情報一覧CSVファイル
timeout = 30                             ;waitタイムアウト値
separator = ','                          ;CSV区切り文字

fileopen fh csvfile 0 0                  ;CSVファイルを開く

i = 0
while 1
  i = i+1                                :何行目の処理かiで管理
  filereadln fh buf                      ;現在の行の内容をbufに格納して、行を進める

  if result then                         ;空行ならループを抜ける(1行上の処理で値が取得できたかresultに結果が自動で入る)
    break
  endif

  if i <= 1 then                         ;1行目は見出し行なのでスキップ
    continue
  endif

  ;-----------------------------------
  ;接続先情報取得
  ;-----------------------------------
  strsplit buf separator                 ;bufから各変数の値を格納
  HOSTNAME = groupmatchstr1
  HOSTADDR = groupmatchstr2
  USERNAME = groupmatchstr3
  PASSWORD = groupmatchstr4

  ;-----------------------------------
  ;SSHログイン
  ;-----------------------------------
  COMMAND = 'ssh '                       ;ログインコマンド作成
  strconcat COMMAND USERNAME
  strconcat COMMAND '@'
  strconcat COMMAND HOSTADDR

  sendln COMMAND                         ;SSHログインコマンド実行

  wait 'password:'
  
  if result=0 then                       ;waitがtimeoutなら現在のターゲットの処理をスキップ
    continue
  endif
  
  sendln PASSWORD 

  wait '$' ;プロンプトが表示されるまで待機

  ;-----------------------------------
  ;ファイル出力
  ;-----------------------------------
  ;出力ファイル作成
  getdate DATESTR '%y%m%d'               ;現在日時を取得
  LOGFILE = LOGDIR                       ;ログファイル名作成
  strconcat LOGFILE '\'
  strconcat LOGFILE HOSTNAME
  strconcat LOGFILE '_'
  strconcat LOGFILE DATESTR
  strconcat LOGFILE '.conf'

  ;ファイル出力開始
  logautoclosemode 1 
  logopen LOGFILE 0 0                    ;上書きで出力ファイルを開く

  ;-----------------------------------
  ;コマンド実行
  ;-----------------------------------
  sendln '<ホスト名を出力するコマンド>'    ;ホスト名を出力
  wait '$' 
  
  sendln '<コンフィグを出力するコマンド>'  ;コンフィグを出力 ※moreなどの対策に必要に応じて"terminal length 0"のようなコマンドも設定するとよい
  wait '$' 

  ;-----------------------------------
  ;マクロ終了
  ;-----------------------------------

  logclose                               ;ログ記録終了

  pause 2

  sendln 'exit'

  pause 2                                ;待機時間を設定しておかないと、ログアウト前に次の処理が走ってしまうことがあるので注意
  
endwhile
  
fileclose fh                             ;CSVファイルを閉じる

end                                      ;マクロを終了

工夫点

ソースコードは汎用的に作成したので別の機会にも使い回しし易い

終わりに

多数の操作対象に対して自動的に操作することにTeraTermマクロは便利なので、汎用的なコードを用意しておいて、今後も都度利用していきたいです。

0
1
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
0
1