作業をしていて面倒だなと思ったイベントログを簡単に複数サーバから取得できないか考える。
エビデンス取りとして「エラーがないこと」的なことを確認するのにイベントログを取得する手順になっていた。いちいちサーバにログインしてイベントビューアーから取得するのは面倒だなと。
なんとか簡単にできませんかね?
Event Viewer
イベントビューアー自体に「別のコンピューターへ接続」があって、これを使って取得することは可能は可能。
ただこれは履歴も残してくれないので、毎回手打ちでサーバを入力しないといけない。
さらには同じ認証情報で別のサーバへログインできればいいけど、認証情報が異なるとID/パスワードを入力することも必要となってしまいさらに手間が増えてしまう。
Get-EventLog
イベントログを取得するためのPowershellコマンド。
オプションは↓のようなものがある。
- -LogName イベントログの種類(Application, System, Security)
- -ComputerName 実行するサーバを指定
- -After 範囲指定する場合に指定。この日から。日付 YYYY/MM/DD 形式
- -Before 範囲指定する場合に指定。この日まで。日付 YYYY/MM/DD 形式
この「-ComputerName」を使えば、複数サーバあってもまとめてイベントログを取得できる。
サーバの配列を作って、当日の Application と System のイベントログを取得するスクリプトを作成してみた。
$servers = "Server1", "Server2" $evttypes = "Application", "System" $today = (Get-Date).ToString("yyyy/MM/dd") $tmrrw = (Get-Date).AddDays(1).ToString("yyyy/MM/dd") foreach ($server in $servers){ foreach ($evttype in $evttypes){ #Get-EventLog -LogName $evttype -ComputerName $server -After $today -Before $tmrrw |Format-List| Tee-Object -Append "out.txt" Get-EventLog -LogName $evttype -After $today -Before $tmrrw |Format-List| Tee-Object -Append "out.txt" } }
イベントログの量が多いと範囲絞っても、時間かかるなぁ。
とりあえずとれたはとれたけど、出力形式含め、見直しは必要そうだ。
コメント