【PowerShell】powershellのssh操作の時だけログを残したい

 

なんとか改善出来ないかな、悩んでいる

取引先のルールでサーバーのログを残す事になっているんだけど

今までは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のスクリプトファイルの拡張子のこと

 

これで作業が少し楽になったーー

色々自動化して楽して金稼ぎたい

 

コメント