例えば、先月分のイベントログを抽出して保存したいとする。
ファイル形式はもとのままで(.evtx)
イベントログの抽出はこれまでも何度かやっていて、いくつか方法はあると思うのだが、保存となるとどうやるのが一般的なのだろう。
抽出無しにすべてを保存するのであればWMIで取ってきて「BackupEventlog」メソッドあたりが使えそうだ。
Powershellのコマンドレットではちょっと見当たらないなぁ・・・。
色々と調べてみたところ「EventLogSession」クラスの「ExportLog」メソッドというのが使えそうである。
.Netframework3.5で追加されたっぽいので、Powershell2.0で使えないのかと思ったが試してみたところ問題なく動くようだ。(理由は良く判っていないのだが、単に3.5がインストールされていれば良いのだろうか・・・)
ログを抽出する条件については以下で使ったXPath形式で良さそうだ。
PowerShell: ◆イベントログを抽出する FilterXPath
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 | #◆イベントログ抽出 $fromDay = -22 #前日:-1 $days = 3 #開始からの日数 $logname = "System" $outfile = "F:\Desktop\mySystemLog.evtx" $startTime = [DateTime](Get-Date).AddDays($fromDay).ToString("yyyy/MM/dd 00:00:00") $startUtcTime = [System.TimeZoneInfo]::ConvertTimeToUtc( $startTime).ToString("yyyy-MM-ddTHH:mm:ssZ") $endUtcTime = [System.TimeZoneInfo]::ConvertTimeToUtc( $startTime.AddDays($days)).ToString("yyyy-MM-ddTHH:mm:ssZ") $filter = @" Event/System/TimeCreated[@SystemTime>='$startUtcTime'] and Event/System/TimeCreated[@SystemTime<'$endUtcTime'] "@ $evsession = New-Object -TypeName System.Diagnostics.Eventing.Reader.EventLogSession $evsession.ExportLog($logname,"LogName",$filter,$outfile) |
0 件のコメント:
コメントを投稿