eventLogBackupCSV.wsf
WindowsのイベントログをCSV形式でバックアップします。
EVT形式のバックアップではテキスト検索が出来ないので、 CSVでバックアップしたいという要望から作成しました。
ログは性質上常に溜まっていってしまい、ディスク容量を圧迫してしまいます。
よって、本スクリプトではレジストリを利用し、定期的に削除を実施する様にします。
具体的には、ファイル名の先頭に連番を付け、あらかじめ設定した数値を超えると、 連番(レジストリに記入)から設定した数値(MAXSAVECOUNT)の差の数値がついたファイルを削除します。
とりあえず作ったモノなので、精度は良くありませんが参考にはなると思います。
Function regKeyReturn(regKey,regEntry) Const HKEY_LOCAL_MACHINE = &H80000002 strComputer = "." Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv") objRegistry.GetDWORDValue HKEY_LOCAL_MACHINE,regKey,regEntry,strValue regKeyReturn = strValue Exit Function End Function
レジストリエントリを確認する関数です。
function ctrlReplace(strMessage) { while( strMessage.search("\r\n") != -1 ) { strMessage = strMessage.replace("\r\n"," "); } return strMessage; }
イベントログには改行が含まれており、Excel(CSVファイルの為)などで開くと見苦しい為、 改行をスペースに変換する関数です。
var MAXSAVECOUNT = 3; var OUTPUT_FILEPATH = "C:\\EVTCSV\\"; var OUTPUT_FILE = "DayEventLog.csv"; var computerName = "."; var oSh = WScript.CreateObject("WScript.Shell"); var oNet = WScript.CreateObject("WScript.Network"); var oFs = WScript.CreateObject("Scripting.FileSystemObject"); var oWmi = GetObject("winmgmts:{impersonationLevel=impersonate, (Backup,Security)}!\\\\"+computerName+"\\root\\cimv2"); var oNTLogEvent = oWmi.ExecQuery("Select * from Win32_NTLogEvent"); var oReg = GetObject("winmgmts:\\\\"+computerName+"\\root\\default:StdRegProv"); var registryEntry = "Software\\Script\\EventLogCSVBackup"; var registryKey = "Date"; var returnValue = regKeyReturn(registryEntry,registryKey); var i = 1; if( returnValue == null ) { oSh.RegWrite("HKLM\\"+registryEntry+"\\"+registryKey,i,"REG_DWORD"); } else { i = i + oSh.RegRead("HKLM\\"+registryEntry+"\\"+registryKey); oSh.RegWrite("HKLM\\"+registryEntry+"\\"+registryKey,i,"REG_DWORD"); } var OUTPUT_FILENAME = OUTPUT_FILEPATH+i+OUTPUT_FILE; var EventLog_CSVPrint = oFs.OpenTextFile(OUTPUT_FILENAME,8,true,0); var logLine; logLine = "時刻"+","; logLine += "ログファイル"+","; logLine += "ソース"+","; logLine += "タイプ"+","; logLine += "コンピュータ名"+","; logLine += "ユーザー名"+","; logLine += "イベントID"+","; logLine += "メッセージ"+","; EventLog_CSVPrint.WriteLine(logLine); for ( var e = new Enumerator(oNTLogEvent);!e.atEnd();e.moveNext() ) { try { var NTEventLog = e.item(); logLine = null; logLine = NTEventLog.TimeGenerated+","; logLine += NTEventLog.Logfile+","; logLine += NTEventLog.SourceName+","; logLine += NTEventLog.Type+","; logLine += NTEventLog.ComputerName+","; logLine += NTEventLog.User+","; logLine += NTEventLog.EventCode+","; logLine += ctrlReplace("\""+NTEventLog.Message+"\""); logLine += ""; EventLog_CSVPrint.WriteLine(logLine); } catch(ex) { ; } } EventLog_CSVPrint.Close(); if( i - MAXSAVECOUNT > 0 ) { i = i - MAXSAVECOUNT; deleteBackupLogFilePath = OUTPUT_FILEPATH+i+OUTPUT_FILE; if(oFs.FileExists(deleteBackupLogFilePath)){ oFs.DeleteFile(deleteBackupLogFilePath); } }
利用する場合には、保存先(Cドライブになっているので注意)、レジストリパス、保存日数 の値を確認して下さい。