JH3DRN 趣味の徒然

主にアマチュア無線、電子工作について書いてます.

アライドテレシスのスイッチ時刻をPCに合わせるマクロ

TeraTerm のマクロ機能を使って複数スイッチの時刻をパソコン時刻に同期させる

いきなりこんな事を書くので驚いた方がいらっしゃるかも知れないが、今の所こんな感じでネットワーク関連の仕事をしている。そんな中で作ったマクロが割と評判が良いので公開する事にした。TeraTerm のマクロは大変良く出来ていて一度使うと止められないで、いろんなマクロを作って遊んでいる?(仕事だよ)そんな中で割と一般的な機能だと思われる”時刻合わせ”を備忘をかねて掲載する事にした。少し長いがたいした事はやっていないので、マクロ作成の参考になればと。

マクロの内容
;
; アライドテレシス社製スイッチ AT-SHシリーズの時刻をPC時刻に合わせる
;  スイッチのアドレスはファイル ipaddr.txt に格納
;   スイッチへの接続はTelnet を使用
;
;   Update: 2023/06/05
;   Author: JH3DRN
;
; #clock set コマンドの内容
; 例文:システム時計を「2012年2月3日 13時41分0秒」に設定する。
; awplus# clock set 13:41:00 3 feb 2012 

; set username & pass
Username = '<Login user name>'   ; スイッチへのlogin user name
passwd = '<password>'            ; ログイン password

UsernamePrompt = 'login: '           ; プロンプト待ち文字列
PasswordPrompt = 'Password: '    ; パスワードば待ち文字列

fileopen fhandle 'ipaddr.txt' 0  ; IPアドレスの入ったファイルをオープンする

:loop                             ; ループの先頭行

  filereadln fhandle dest_ip     ; ファイルの最初の1行を読んで dest_ip に格納
  if result goto fileclose       ; ファイルの最後だったら閉じる

  msg = dest_ip                  ; connect 文字列を作成する
  strconcat msg ':23 /nossh '
  strconcat msg ' /user='
  strconcat msg username
  strconcat msg ' /passwd='
  strconcat msg passwd

  connect msg                    ; msg = 192.168.**.**:22 /nossh /user=manager /passwd=********
                                  ;  ↑ こんな感じのメッセージが作成されるはず  
  wait   UsernamePrompt           ; login プロンプトを待つ
  sendln UsernamePrompt           ; ユーザー名を送信する

  wait   PasswordPrompt           ; パスワード待ちプロンプトを待つ
  sendln passwd                  ; パスワードを送信する

  sendln 'enable'                 ; enable コマンドを送信する
  wait '#'                        ; # を待つ
  pause 1                        ; 1秒待つ

  gettime timestr                 ; 時刻を獲得し、timestr に格納する
  getdate day "%d"                ; 日付を獲得する
  getdate mon "%m"                ; 月を獲得する
  getdate year "%Y"               ; 年を獲得する
  str2int val mon                   ; 月を数値に変換

  if val=1 then                   ; 月(数字)を英語に変換
    mons = 'Jan'
  endif 
  if val=2 then
    mons = 'Feb'
  endif 
  if val=3 then
    mons = 'Mar'
  endif 
  if val=4 then
    mons = 'Apr'
  endif 
  if val=5 then
    mons = 'May'
  endif 
  if val=6 then
    mons = 'Jun'
  endif 
  if val=7 then
    mons = 'July'
  endif 
  if val=8 then
    mons = 'Aug'
  endif 
  if val=9 then
    mons = 'Sep'
  endif 
  if val=10 then
    mons = 'Oct'
  endif 
  if val=11 then
    mons = 'Nov'
  endif 
  if val=12 then
    mons = 'Dec'
  endif 

  send 'clock set '                 ; 時刻設定コマンド文字列作成
  send timestr
  send ' '
  send day ' ' mons ' ' year        ; dd/mon/yyyy 作成
  sendln                            ; コマンド送信

  wait '#'                          ; wait prompt "#"
  pause 1
  closett                           ; Teraterm sesstion close

goto loop                           ; goto next Switch

:fileclose
fileclose fhandle                   ; Program end
IPアドレスを入れておく "ipaddr.txt" はこんな感じ
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
その他

<Login user name>にはログインユーザ名を <password> にはパスワードを書いて下さい。このマクロでちょっと苦労したのは月の設定。コマンドで所得出来る形式が数字の1~12で、スイッチへの設定は英語。それでつまらないマクロ(コード)を長々と書いてしまった。後はスイッチ1台毎にPCから時刻を取得しているので、スイッチ間での時刻ずれは少ないと思う。今の所動いているので良しとしているが、もうちょっとスマートにしたいと思っている。