はじめに
VBScriptで過去1年間のイベントログを、CSV形式で出力するサンプルです。Windows標準のMMCからCSV形式でエクスポートしても、改行が含まれるメッセージがあると、ExcelやAccessでインポートエラーとなるので、VBScriptを使って整形して出力します。
過去1年間のイベントログをCSV形式で出力する
- eventlogExport.vbs
'//イベントログをCSV形式でエクスポートする
On error resume next
'//変数
Dim oClassSet_All
Dim oClassSet_Eventcode
Dim oClassSet_OS
Dim oClass
Dim oLocator
Dim oService
dim strBaseDate
dim strStartDate
dim intEventCode
dim strBeforeEventCode
dim intEventCount
dim strAnalyzeMsg
dim eventDate
dim eventDateJST
dim strEventMsg
'//WMI接続
Set oLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set oService = oLocator.ConnectServer
'//取得するイベントログの開始日
'strBaseDate = "2020/1/1"
strBaseDate = DateAdd("y", -1, DateAdd("h", -9, now))
'//イベントログの取得(Application、System)
Set oClassSet_All = oService.ExecQuery("Select * From Win32_NTLogEvent Where (logfile='System' or Logfile='application') And TimeGenerated > '"& strBaseDate &"'")
'//ヘッダー出力
wscript.echo "ComputerName,Logfile,TimeGenerated,TimeGenerated(JST),EventType,type,EventCode,User,SourceName,Message"
'//イベントログコレクション
For Each oClass In oClassSet_All
'//イベント日時変換(JST)
eventDate = cdate(left(oClass.TimeGenerated,4) & "/" & mid(oClass.TimeGenerated,5,2) & "/" & mid(oClass.TimeGenerated,7,2) & " " & mid(oClass.TimeGenerated,9,2) & ":" & mid(oClass.TimeGenerated,11,2) & ":" & mid(oClass.TimeGenerated,13,2))
eventDateJST = DateAdd("h", 9 , eventDate)
'//MS-AccessへのCSVで取り込みエラーが出ないように、イベントログメッセージの変換。
'//改行は(CrLf)にする
'//ダブルクォーテーションはシングルクォーテーションにする
strEventMsg = oClass.Message
strEventMsg = Replace(strEventMsg, vbCrLf, "(CRLF)")
strEventMsg = Replace(strEventMsg, vbCr, "(CR)")
strEventMsg = Replace(strEventMsg, vbLf, "(LF)")
strEventMsg = Replace(strEventMsg, chr(34), "'")
'//イベントログ出力
wscript.echo _
chr(34) & oClass.ComputerName & chr(34) & "," &_
chr(34) & oClass.Logfile & chr(34) & "," &_
chr(34) & oClass.TimeGenerated & chr(34) & "," &_
chr(34) & eventDateJST & chr(34) & "," &_
chr(34) & oClass.EventType & chr(34) & "," &_
chr(34) & oClass.Type & chr(34) & "," &_
chr(34) & oClass.EventCode & chr(34) & "," &_
chr(34) & oClass.User & chr(34) & "," &_
chr(34) & oClass.SourceName & chr(34) & "," &_
chr(34) & strEventMsg & chr(34)
Next
'//オブジェクトクリア
Set oClassSet_All = Nothing
Set oClass = Nothing
Set oService = Nothing
Set oLocator = Nothing
Wscript.quit
実行方法
取得したいサーバーで、コマンドプロンプトから以下のコマンドで実行してください
>cscript //NOLOGO (スクリプトパス)\eventlogExport.vbs > (実行結果出力先パス、ファイル名)
例)cscript c:\temp\eventlogExport.vbs //NOLOGO > c:\temp\eventlogExport.csv
出力結果
CSV形式(カンマ、””区切り)で出力します。
ComputerName:コンピュータ名
Logfile:イベントログの種類(Application、System)
TimeGenerated:イベント発生日時
TimeGenerated(JST):イベント発生日時(日本時間変換後)
EventType:イベントの種類コード
type:イベントの種類
EventCode:イベントコード
User:ユーザー
SourceName:ソース
Message:イベントの内容(改行なし)