#自動化が叫ばれる昨今いかがお過ごしですか?
##作成の経緯
2020年 8月初旬 1500個のcommandをUbuntuに連続発行するという絶望的な作業が舞い込んだ。
あーめんどくせーAnsible PlayBookとかめんどくせーよと、スイカバー食べながら思った。
あ、そうだ別にTeraTermでいいじゃん! と思い作りましたので、備忘かねて記載しました。
##要件
・テキストファイルに記載しているcommandを1行づつ実行したい。
・ついでにログの自動でとってもらおう
##コード
;======================================================
;teratermマクロ
;コマンドファイルを読み込み順次実行するマクロです。
;
;コマンドファイル順次実行時、プロンプト出力を待ってから
;次のコマンドを実行するか、 指定時間ポーズするかを選択できます。
;コマンドファイル実行前に、デフォルトで最初に実行したい
;コマンドも記載可能
;ログを自動で取得します。
;======================================================
;-----------------------------------------------------------
;初期設定
;-----------------------------------------------------------
;ログ自動保存
;ログ保存先
LOGSPATH = 'C:\test\log\'
;ログファイル名
getdate LOG_NAME 'teraterm(&h)_%Y%m%d_%H%M%S.log'
FULLPATH = LOGSPATH
strconcat FULLPATH LOG_NAME
;ログ取得開始
logopen FULLPATH 1 1
;タイトル設定
settitle 'コマンドファイルの順次実行マクロ'
;コマンドファイル※commandを羅列しているファイルをフルパス指定
cmdfile = 'C:\Users\test\Desktop\apt-get.txt'
;コマンドファイル順次実行時、プロンプト出力を待つか(1)
;指定時間ポーズするか(1以外)、どちらかを設定
wait_prompt_f = 0
;プロンプト※表示プロンプトに合わせて編集
wait_prompt = 'test@testvm:~$'
;ポーズタイム(s)
pause_time = 1
;-----------------------------------------------------------
;デフォルトで最初に実行したいコマンド
;-----------------------------------------------------------
default_input = 1 ;無ければ0にする
if default_input = 1 then
sendln 'date'
sendln 'whoami'
sendln 'hostname'
sendln 'pwd'
endif
;-----------------------------------------------------------
;コマンドファイルの順次実行
;-----------------------------------------------------------
;ファイルオープン
fileopen fh cmdfile 0
;ファイル内の実行行数
count = 1
while 1
;コマンドファイルから1行読み込み
filereadln fh buf
;読み込めない時はループを抜ける
if result goto breakloop
;ファイル内の実行行数表示
int2str count_str count ;数値を文字に変換
sendln '### ' count_str ' 行目を実行します ###'
;コマンド実行
sendln buf
if wait_prompt_f = 1 then
;プロンプト出力を待つ
wait wait_prompt
else
;指定時間ポーズする
pause pause_time
endif
count = count + 1
endwhile
:breakloop
;ファイルクローズ
fileclose fh
sendln
###おわりに
Ansible等とは違いEngineもいらずに使えるので、とても楽ちんでした。
運用等で例えば仮想マシン払い出し作業を自動化(カタログ化)するのは、
やはりAnsible(Tower)とかが必要だが、簡単に済ませたい場合は
TeraTermマクロも捨てたもんじゃないなぁと感じた出来事でした。