なんとか改善出来ないかな、悩んでいる
取引先のルールでサーバーのログを残す事になっているんだけど
今まではteratermの自動ログを使っていたんだけど
teretermが使いにくい。。。
なのでpowershellでssh操作してるんだけど、毎回ログを操作終わったらctrl+Aでコピペして取っていたんだけど
めんどい・・・
なんとか自動化したい
■目標
powershellのログを自動で取りたい
ただし、ただpowershellのログを全部自動でログを残すようにしてみると
めちゃくちゃログ出る
slack毎回powershell使ってたんかい
という位不要なログが出る
出来ればssh操作の時だけログを残したい
ということで、調べてみると、下記のやり方でssh操作の時だけログを残すことが出来るようになった!!
★まず、
C:\Users\*****\Documents\WindowsPowerShell
ここに「WindowsPowerShell」というディレクトリを作成
そしたら中に
Microsoft.PowerShell_profile.ps1
というファイルを作成
中にはこれを記載
# SSHセッションの場合のみトランスクリプトを開始
if ($env:SSH_CLIENT -or $env:SSH_TTY) {
# 現在の年月日時分秒を取得
$timestamp = Get-Date -Format "yyyy_MM_dd_HH-mm-ss"
# トランスクリプトファイル名を生成
$transcriptFileName = "serverLog_$timestamp.log"
# トランスクリプトを開始
Start-Transcript -Path "C:\Users\*****\Documents\serverLog\$transcriptFileName"
}
# SSHコマンドをラップしてログを記録
function ssh {
$timestamp = Get-Date -Format "yyyy_MM_dd_HH-mm-ss"
# 最初の引数(接続先)をファイル名に含める
$target = $args[0] -replace '[\\/:*?"<>|]', '_'
$transcriptFileName = "${target}_serverLog_${timestamp}.log"
$logPath = "C:\Users\*****\Documents\serverLog\$transcriptFileName"
Start-Transcript -Path $logPath
try {
& ssh.exe @args
} finally {
Stop-Transcript
}
}
これでOK!!
試しにssh接続してみると
自動でログが出力される!!
しかも、接続先のipをファイル名の先頭に残すようにしたので、わかりやすくなた!!
ちなみにファイル名の拡張子の「ps1」は、powershellのスクリプトファイルの拡張子のこと
これで作業が少し楽になったーー
色々自動化して楽して金稼ぎたい

コメント