以前に複数台のマシンに対してコマンドを実行させるTeratermマクロを作成していたが、ある程度の完成形が出来たので掲載。

今回の改修内容は以下。

  1. host.listをマクロ実行時にファイル選択して指定するようにした。
  2. ログをマクロのあるフォルダに出力するようにした。
  3. コマンドを羅列したリストをマクロ実行時にファイル選択し、記述されているコマンドを実行させるようにした。

上記3点。
個人的には、「command.list」にコマンドを羅列しておけばいいので、実行したいコマンドを修正する際にマクロのコードをいじる必要がなくなったのが大きいかなと。
それは「host.list」の指定方法についても同じだけど。

以下に対象となるファイルの入力例とマクロのソースを記述する。

●host.list(任意のファイル名)

#HOST_NAME,HOST_IP,HOST_USER,HOST_PASS
AAA,172.26.15.240,aaauser,Password1
BBB,172.26.15.240,bbbuser,Password2
CCC,172.26.15.240,cccuser,Password3

host.listについては前回のものと同様。

●command.list(任意のファイル名)

df -h
free
vmstat
exit

command.listもあくまで一例。ここに記述するコマンドは自由に書き換えてもらって構わない。
ただしこのマクロで実行する上でのポイントとして、

  1. sudoは対応出来ない(パスワード入力のwaitに対応していないため)
  2. 一応、最後にexitを入れる

上記2点を考慮してもらいたい。

Sponsored Links

●一括コマンド実行.ttl

; [Before]========================
; Read File "HOST_FILE"
Filenamebox 'File selection "Host List File"' 0
If result<>0 Then
HOST_FILE = INPUTSTR
Endif
; Read File "COMMAND_FILE"
Filenamebox 'File selection "Command List File"' 0
If result<>0 Then
COMMAND_FILE = INPUTSTR
Endif
; Get Current Directory
Getdir CurrentDir
LOGSPATH = CurrentDir
Strconcat LOGSPATH '\'
; Get Date
Getdate Str_Getdate
Strcopy Str_Getdate 1 4 Str_Year
Strcopy Str_Getdate 6 2 Str_Mon
Strcopy Str_Getdate 9 2 Str_Day
; Get Time
Gettime Str_Gettime
Strcopy Str_Gettime 1 2 Str_Hour
Strcopy Str_Gettime 4 2 Str_Min
Strcopy Str_Gettime 7 2 Str_Sec
; Read from "HOST_FILE" To "HOST_LIST"
Fileopen HOST_LIST HOST_FILE 0
; Read 1 line from "HOST_LIST" To "HOST_LIST_LINE".
; "HOST_LIST" move to the next line
Filereadln HOST_LIST HOST_LIST_LINE
While RESULT = 0
Strlen HOST_LIST_LINE
If RESULT = 0 Goto END
Strmatch HOST_LIST_LINE '^#'
If RESULT<>1 CALL CONNECT_PROCESS
; [END]===========================
:END
Filereadln HOST_LIST HOST_LIST_LINE
EndWhile
Fileclose HOST_LIST
End
; [CONNECT_PROCESS]===============
:CONNECT_PROCESS
Strsplit HOST_LIST_LINE ','
HOST_NAME = Groupmatchstr1
HOST_IP   = Groupmatchstr2
HOST_USER = Groupmatchstr3
HOST_PASS = Groupmatchstr4
; Write Log
FULLPATH = LOGSPATH
Strconcat FULLPATH Str_Year
Strconcat FULLPATH Str_Mon
Strconcat FULLPATH Str_Day
Strconcat FULLPATH '_'
Strconcat FULLPATH Str_Hour
Strconcat FULLPATH Str_Min
Strconcat FULLPATH Str_Sec
Strconcat FULLPATH '_'
Strconcat FULLPATH HOST_NAME
Strconcat FULLPATH '.log'
; Remote Access Server(SSH Connect)
MSG       = HOST_IP
Strconcat MSG  ' /ssh /2 /nosecuritywarning /auth=password /user='
Strconcat MSG HOST_USER
Strconcat MSG ' /passwd='
Strconcat MSG HOST_PASS
Connect   MSG
; Connet decision
If result<>2 Then
Strconcat  FULLPATH '.error'
Filecreate ERRORFILE FULLPATH
Fileclose  ERRORFILE
Closett
Return
Endif
; Log write
Logopen FULLPATH 1 1
Logwrite '*********************************'#13#10
Logwrite 'Hostname:'
Logwrite HOST_NAME
Logwrite #13#10
Logwrite 'UserName:'
Logwrite HOST_USER
Logwrite 'Execution time :'
Str_Get=Str_Getdate
Strconcat Str_Get ' '
Strconcat Str_Get Str_Gettime
Logwrite Str_Get
Logwrite #13#10
Logwrite '*********************************'#13#10
Wait_word = HOST_USER
Strconcat Wait_word '@'
; Run Program
Fileopen COMMAND_LIST COMMAND_FILE 0
; Read 1 line from "HOST_LIST" To "HOST_LIST_LINE".
; "HOST_LIST" move to the next line
While 1
Filereadln COMMAND_LIST COMMAND_LIST_LINE
If RESULT = 1 Break
Flushrecv
Wait Wait_word
Sendln COMMAND_LIST_LINE
Endwhile
Fileclose COMMAND_LIST
Closett
Return

なお、前回も記述したがこのマクロはTeratermのバージョンがバージョン4.67以降の対応になるので注意。

これでコマンド一括実行マクロはある程度まとまったかな?

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

This article has 2 comments

  1. Pingback: 複数台に対し同時にSSH接続、コマンドを実行する『Parallelssh』 | 俺的備忘録 〜なんかいろいろ〜

  2. Pingback: ログイン先を選択して自動ログインを行うTeratermマクロ | 俺的備忘録 〜なんかいろいろ〜

Leave a Comment

メールアドレスが公開されることはありません。

*