平常工作中直接打开ttermpro.exe在gui中连接linux服务器,最近接触到用excel控制teraterm的marco,学习了一下。留作记录。
vba代码
- 读取excel文件里配置的信息,拼接成一个命令(字符串),在windows的cmd里执行。
- 命令类似C:\work\teraterm\ttpmacro.exe /V C:\work\bin\slq.ttl 192.168.1.10 yourpassword"
Dim executeSheet As Worksheet
Dim configSheet As Worksheet
Dim HOSTADDR, PASSWORD, ttpmacro, ttl, result As String
Dim wsh As Object
Private Function init()
Set executeSheet = ThisWorkbook.Worksheets("実行")
Set configSheet = ThisWorkbook.Worksheets("設定")
'HOSTADDR = executeSheet.Range("B4").Value
HOSTADDR = "192.168.**.**"
PASSWORD = "*******"
'ttpmacroはteratermにインストールPATHであり,ttpmacro.exeの格納PATHでもあり
ttpmacro = configSheet.Range("C2").Value
ttpmacro = ttpmacro & "\ttpmacro.exe"
Set wsh = CreateObject("WScript.Shell")
End Function
Sub test1()
Call init
command1 = ttpmacro & " /V C:\works\bin\slq.ttl"
command1 = command1 & Space(1) & HOSTADDR & Space(1) & PASSWORD
result = wsh.Run(Command:=command1, WaitOnReturn:=True)
MsgBox "result:" & result
End Sub
ttl文件(slq.ttl)
- ttl文件里记录了 一些登录的信息,要在远程服务器执行的脚本,log相关。
- param2,param3用来读取windows cmd执行的命令 的参数。
- sendln 'ls’会在服务器输入ls并回车
- 连续的sendln可能会有sendln被跳过,所以每个sendln前加个wait '#'或者wait ‘$’
- LOGOPEN方法参考https://ttssh2.osdn.jp/manual/4/ja/macro/command/logopen.html,第一个1表示写入所有内容,第二个1表示追加写log。
binary flag の値が0のとき、受信した漢字、改行文字は変換されてファイルに書き込まれ、エスケープシーケンスは書き込まれない。
binary flag の値が0以外のとき、受信した文字をすべてそのままファイルに書き込む。append flag の値が0以外で、ファイル がすでに存在する場合、そのファイルに追加して書き込む。
append flag の値が0で、ファイル がすでに存在する場合、そのファイルは上書きされる。
;;C:\**\ttpmacro.exe /V C:\**\slq.ttl 192.168.**.** yourpassword
;===========================================================
; 接続情報
;HOSTADDR = '192.168.**.**'
;USERNAME = 'teratermのlogin Username'
;PASSWORD = 'teratermのlogin Password'
;windows shellでのコマンドが "**\\ttpmacro.exe /V **\**.ttl 192.168.**.** your**password"ので、
;param2は192.168.**.**、param3はyour**password
HOSTADDR = param2
USERNAME = 'teratermのlogin Username'
PASSWORD = param3
; 接続オプション
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD
; 接続
connect COMMAND
;timeout=3 ;timeoutの使用方法が わからない
wait '#'
;write log
getenv 'USERNAME' username
gettime timestr "%Y%m%d-%H%M%S"
getdir mdir
sprintf2 filename '%s\log_%s_%s.log' mdir username timestr
logopen filename 1 1
logwrite 'Log start'#13#10
logwrite '*******************************************'#13#10
logclose
wait '#'
sendln 'echo Start '
wait '#'
testdir='a'
;foldersearch folderが存在するかどうか調べる。
;存在する場合は、システム変数 result に1が返る。存在しない場合は、result に0が返る。
;filesearch fileが存在するかどうか調べる。
foldersearch testdir
;result: 0:ng 1:ok
messagebox result 'result'
if result=0 then
;フォルダを作成する。 parent path need existing
foldercreate testdir
endif
messagebox result 'result'
foldercreate "a/b"
messagebox result 'create a/b result'
;消息框,输入框
;inputbox <message> <title> [<default> [<special>]]
inputbox 'Password:' 'Login' 'zhang3'
messagebox inputstr 'input'
strdim msg 3
msg[0] = 'banana'
msg[1] = 'apple'
msg[2] = 'orange'
listbox 'select fruit' 'test2' msg
sprintf2 var "%d" result
messagebox var "result2"
; result
; -1: Cancel
; 0: banana
; 1: apple
; 2: orange
times=-1
:retry
times=times+1
sprintf2 title 'retied %d times' times
yesnobox 'もう一回やりますか?' title
if result goto retry
end
;transfer file, it can be stoped before files are transfered,so maybe need to check,
;such as https://qiita.com/KurokoSin/items/b4d2d0a81c8d05f110ef
;scprecv '/remote/bad/1.log' 'C:\work1\111.log'
;ng: scprecv '/remote/bad/a.log' "C:\work1\11\"
;scprecv '/remote/bad/a.log' "C:\work1\111\1.log"
;scpsend 'C:work2\1.log' '/remote/bad/'
;scpsend 'C:work2\2.log' '/remote/bad/'
;scpsend 'C:work2\bin.txt' '/remote/bad/'
;scpsend 'C:work2\1.log' '/remote/bad/a.log'