Microsoft .NET FrameworkとTera Term MACROを利用して作成したオートログインツール[Windows PowerShell][Tera Term]
実行環境
Windows PowerShell 5.1
Tera Term Version 4.106
CentOS release 6.7
前回と前々回の記事で紹介した内容を組み合わせて作成した、GUIのオートログインツールです。
# AutoLoginTeraterm.ps1
#
# 変数の定義 -----------------------------------------------------------
# DefaultAccount.csv(デフォルトで表示させたいユーザーとパスワードをカンマ区切りで記載)
$defaultAccountFile = "DefaultAccount.csv"
# IpList.csv(コンボボックスで表示させたいIPを改行区切りで記載)
$ipListFile = "IpList.csv"
# ttpmacro.exeのパス
$ttpmacro = "C:\Program Files (x86)\teraterm\ttpmacro.exe"
# 外部ファイルの読み込み -----------------------------------------------
# IpList.csvの存在を確認
if (Test-Path $PSScriptRoot\$ipListFile) {
$ipList = Get-Content $PSScriptRoot\$ipListFile
} else {
$ipList = ""
}
# DefaultAccount.csvの存在を確認
if (Test-Path $PSScriptRoot\$defaultAccountFile) {
$defaultAccount = Get-Content $PSScriptRoot\$defaultAccountFile
} else {
$defaultAccount = ""
}
# ----------------------------------------------------------------------
# logディレクトリの存在を確認
if ( -not ( Test-Path $PSScriptRoot"\log" ) ) {
New-Item $PSScriptRoot"\log" -ItemType Directory
}
# .NET Frameworkクラス(System.DrawingとSystem.Windows.Forms)の読み込み
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
# Font
$font = New-Object System.Drawing.Font("メイリオ",11)
# Tooltip
$tooltip = New-Object System.Windows.Forms.Tooltip
$tooltip.ShowAlways = $True
$tooltip.ToolTipIcon = "none"
$tooltip.ToolTipTitle = "説明"
$tooltip.UseFading = $False
$tooltip.AutoPopDelay = 3000
# Form
$form = New-Object System.Windows.Forms.Form
$form.Text = 'オートログインツール'
$form.AutoSize = $true
$form.StartPosition = 'CenterScreen'
# 対象サーバーGroupBox -----------------------------------------------------
$groupBox0 = New-Object System.Windows.Forms.GroupBox
$groupBox0.Location = New-Object System.Drawing.Point(10,10)
$groupBox0.AutoSize = $true
$groupBox0.text = "対象サーバー"
# label0
$label0 = New-Object System.Windows.Forms.Label
$label0.Location = New-Object System.Drawing.Point(10,40)
$label0.AutoSize = $true
$label0.Text = 'IP'
# label1
$label1 = New-Object System.Windows.Forms.Label
$label1.Location = New-Object System.Drawing.Point(10,90)
$label1.AutoSize = $true
$label1.Text = 'ユーザー'
# label2
$label2 = New-Object System.Windows.Forms.Label
$label2.Location = New-Object System.Drawing.Point(10,140)
$label2.AutoSize = $true
$label2.Text = 'パスワード'
# comboBox0
$comboBox0 = New-Object System.Windows.Forms.ComboBox
$comboBox0.Location = New-Object System.Drawing.Point(90,30)
$comboBox0.Size = New-Object System.Drawing.Size(150,0)
$comboBox0.Font = $font
$comboBox0.Add_MouseHOver({$tooltip.SetToolTip($comboBox0,"IPアドレスを選択して下さい。")})
foreach ($item in $ipList)
{
$comboBox0.Items.Add($item)
}
# textBox0
$textBox0 = New-Object System.Windows.Forms.TextBox
$textBox0.Location = New-Object System.Drawing.Point(90,80)
$textBox0.Size = New-Object System.Drawing.Size(150,0)
$textBox0.Font = $font
$textBox0.Text = $defaultAccount.Split(',')[0]
$textBox0.Add_MouseHOver({$tooltip.SetToolTip($textBox0,"ユーザーを入力して下さい。")})
# textBox1
$textBox1 = New-Object System.Windows.Forms.TextBox
$textBox1.Location = New-Object System.Drawing.Point(90,130)
$textBox1.Size = New-Object System.Drawing.Size(150,0)
$textBox1.Font = $font
$textBox1.Text = $defaultAccount.Split(',')[1]
$textBox1.PasswordChar = '*'
$textBox1.Add_MouseHOver({$tooltip.SetToolTip($textBox1,"パスワードを入力して下さい。")})
$groupBox0.Controls.AddRange(@($label0,$label1,$label2,$comboBox0,$textBox0,$textBox1))
# 実行GroupBox -------------------------------------------------------
$groupBox1 = New-Object System.Windows.Forms.GroupBox
$groupBox1.Location = New-Object System.Drawing.Point(10,210)
$groupBox1.AutoSize = $true
$groupBox1.text = "実行"
$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = New-Object System.Drawing.Point(10,30)
$okButton.AutoSize = $true
$okButton.Text = 'OK'
$okButton.Add_MouseHOver({$tooltip.SetToolTip($okButton,"対象サーバーにログインします。")})
$okButton.Add_Click({
# ttpmacro.exeの存在を確認
if ( -not ( Test-Path $ttpmacro ) ) {
[System.Windows.Forms.MessageBox]::Show($ttpmacro + " が存在しません。","Result","OK","Warning")
} else {
# CallMain.ttlの存在を確認
if (Test-Path $PSScriptRoot"\CallMain.ttl") {
Remove-Item $PSScriptRoot"\CallMain.ttl"
}
# CallMain.ttlを作成
$callMain = "myserver = '" + $comboBox0.Text + "'`n"
$callMain = $callMain + "username = '" + $textBox0.Text + "'`n"
$callMain = $callMain + "password = '" + $textBox1.Text + "'`n"
$callMain = $callMain + "prompt = username`n"
$callMain = $callMain + "strconcat prompt '@'`n"
$callMain = $callMain + "include 'Main.ttl'`n"
$callMain | Out-File $PSScriptRoot"\CallMain.ttl" -Encoding utf8
# ttpmacroでCallMain.ttlを実行
& $ttpmacro $PSScriptRoot"\CallMain.ttl"
}
})
$cancelButton = New-Object System.Windows.Forms.Button
$cancelButton.Location = New-Object System.Drawing.Point(100,30)
$cancelButton.AutoSize = $true
$cancelButton.Text = 'Cancel'
$cancelButton.DialogResult = [System.Windows.Forms.DialogResult]::Cancel
$cancelButton.Add_MouseHOver({$tooltip.SetToolTip($cancelButton,"ツールを終了します。")})
$form.CancelButton = $cancelButton
$groupBox1.Controls.AddRange(@($okButton,$cancelButton))
# ----------------------------------------------------------------------
$form.Controls.AddRange(@($groupBox0,$groupBox1))
# comboBox0にフォーカスを設定
$form.Add_Shown({$comboBox0.Select()})
# Enterキーを押したときにクリックされるボタンをokButtonに設定
$form.AcceptButton = $okButton
# フォームをモーダルダイアログボックスとして表示
$result = $form.ShowDialog()
変数$ttpmacroでは、実際のttpmacro.exeのパスを定義して下さい。
; Main.ttl
;
; 指定したサーバーに接続する。 -----------------------------------------
command = myserver
strconcat command ' /ssh /2 /auth=password /user='
strconcat command username
strconcat command ' /passwd='
strconcat command password
; myserverに接続する。
connect command
; ログファイル名、保存先を定義する。 -----------------------------------
; MACRO の現在のディレクトリを取得する。
getdir dir
; Tera Term の現在のディレクトリをlogに変更する。
strconcat dir '\log'
changedir dir
; 日時を取得する。
gettime timestr "%Y%m%d-%H%M%S"
; ログファイル名に接続先ipと日時を入れる。
sprintf2 filename 'console_%s_%s.log' myserver timestr
; Tera Term のログ取得を追記モードで開始する。
logopen filename 0 1
; ログイン後に実行したいコマンドを記載する。 ---------------------------
; サブルーチンをコールする。
call sub
; \[\e[1;32m\] 太字;文字色緑
; \[\e[1;36m\] 太字;文字色水
; \[\e[0;39m\] 太字;文字色デフォルト
sendln 'export PS1="[\t][\[\e[1;32m\]\u\[\e[0;39m\]@\[\e[1;36m\]\h\[\e[0;39m\]]# "'
call sub
sendln 'id; uname -n'
call sub
sendln 'date'
call sub
; マクロの実行を終了する。
end
; サブルーチンの始まり。 -----------------------------------------------
:sub
; 200ミリ秒休止する。
mpause 200
; 3回繰り返す。
for i 1 3
; 変数 promptを待つ。
wait prompt
; 改行を送信する。
sendln
next
; メインルーチンへもどる。
return
REM オートログインツール.bat
@ECHO OFF
powershell -ExecutionPolicy Bypass -command %~dp0AutoLoginTeraterm.ps1
上記3つのファイル(AutoLoginTeraterm.ps1、Main.ttl、オートログインツール.bat)とDefaultAccount.csv、IpList.csvを作成し、同じディレクトリに格納して下さい。
DefaultAccount.csvにはデフォルトで表示させたいユーザーとパスワードをカンマ区切りで、IpList.csvにはコンボボックスで表示させたいIPを改行区切りで記載します。
オートログインツール.batを実行することで、冒頭で紹介したメニュー画面が起動します。
入力したIP、ユーザー、パスワードをもとにCallMain.ttlを作成して呼び出し、CallMain.ttlからMain.ttlを呼び出す仕組みになっています。
以上、Microsoft .NET FrameworkとTera Term MACROを利用して作成したオートログインツールでした。