2012年11月28日水曜日

◆イベントログを抽出して保存する

例えば、先月分のイベントログを抽出して保存したいとする。
ファイル形式はもとのままで(.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 件のコメント:

コメントを投稿