evtx形式のイベントログを今日を起点に過去100日分取得する
evtx形式で取得する方法の記事が少ないので、載せます
※ver2以上で動作確認済み
# イベントログ出力関数を定義 # 引数1:ログ種別(System,Application) 引数2:出力先フォルダ(C:¥evtxlog など) function get-evtxlog ($logname,$outpath) { # 開始日付(100日前)と終了日付(今日)を取得し、 # イベントログの選択に使用するクエリ(XPATH形式)に格納する # 開始日付指定(100日前を指定する場合、100と記述する) $fromDay = 100 # 開始日付 $startTime = (Get-Date).AddDays(-$fromDay) # 終了日付(今日) $endTime = (Get-Date) # イベントログの選択に使用するクエリ(XPATH形式)に渡すため、システム時刻(UTC)に変換する $startUtcTime = [System.TimeZoneInfo]::ConvertTimeToUtc($startTime).ToString("yyyy-MM-ddTHH:mm:ssZ") $endUtcTime = [System.TimeZoneInfo]::ConvertTimeToUtc($endTime).ToString("yyyy-MM-ddTHH:mm:ssZ") # イベントログの選択に使用するクエリ(XPATH形式) $filter = @" Event/System/TimeCreated[@SystemTime>='$startUtcTime'] and Event/System/TimeCreated[@SystemTime<'$endUtcTime'] "@ # 出力ファイル名を作成しておく # yyyy-MMdd-HHmm-ss形式の今日日付(出力ファイルの名前用) $YYYYMMDD = $endTime.ToString("yyyy-MMdd-HHmm-ss") # 出力ファイル(ログ種別_yyyy-MMdd-HHmm-ss) $outfile = "${outpath}\${logname}_${YYYYMMDD}_.evtx" # .Netクラスのメソッドを使って出力 # System.Diagnostics.Eventing.Reader.EventLogSession クラスをオブジェクト化 $evsession = New-Object -TypeName System.Diagnostics.Eventing.Reader.EventLogSession # ExportLog メソッドを実行 # 引数は、ログ種別、"LogName"(FilePathかLogName)、クエリ、出力ファイル $evsession.ExportLog($logname,"LogName",$filter,$outfile) } # イベントログ出力関数の定義終了 #### 関数実行 try { # ログ種別エラー用テストコード(コメントアウト) # get-evtxlog "Syste" "C:\evtlog" # 出力先フォルダエラー用テストコード(コメントアウト) # get-evtxlog "System" "C:\qevtlog" # Systemイベントログを取得 get-evtxlog "System" "C:\evtlog" # Applicationイベントログを取得 get-evtxlog "Application" "C:\evtlog" } catch { # 1で終了 exit 1 }