MR2オーナー吉田貴幸のブログ

MR2(SW20)オーナー吉田貴幸のブログ。仕事はITインフラエンジニア。愛車の記事とIT関連の情報を発信しています

【Windows】[VBScript] 過去1年間のイベントログをCSV形式で出力する

 f:id:takayuki-yoshida:20190421223552p:plain

 

はじめに

 

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:イベントの内容(改行なし)