CSV形式でイベントログをバックアップする

作成日時:2009/03/24


eventLogBackupCSV 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ドライブになっているので注意)、レジストリパス、保存日数 の値を確認して下さい。

inserted by FC2 system