Log Parserに関するスレッドをたくさん見つけましたが、どれも私の欲求を満たしていません。
このクエリをログパーサーに適用する必要がありますselect*from security
そして、イベント行を取得してから、どの列にアクセスするかを知って、行ごとにそれらを読み取ります...
助けてください...
ダウンする必要があるもの:1.LogParser.dllを介したWindowsイベントのクエリ(MSUtillライブラリを使用)2。任意のコンテナ内の行を取得して配置します3.行を1つずつ読み取ります4.行の各セルを分離して読み取ることができますアクセスイベントID列、またはメッセージ列のように個別に..。
-質問へ
いくつかありましたが、私はそれらを取得しませんでした。たとえば、人はこれを使用し、単一の行を取りますが、複数の行が必要です。次に何を変換するのか疑問に思います:| どのクラスを使用する必要がありますか
LogQueryClass logger = new LogQueryClassClass();
COMIISW3CInputContextClass inputContext = new COMIISW3CInputContextClassClass();
string query = // i change it during test
ILogRecord record = logger.Execute(query, inputContext).getRecord();
または別の使用これ:単一の結果も返すようです
// prepare LogParser Recordset & Record objects
ILogRecordset rsLP = null;
ILogRecord rowLP = null;
LogQueryClassClass LogParser = null;
COMW3CInputContextClassClass W3Clog = null;
double UsedBW = 0;
int Unitsprocessed;
double sizeInBytes;
string strSQL = null;
LogParser = new LogQueryClassClass();
W3Clog = new COMW3CInputContextClassClass();
try
{
//W3C Logparsing SQL. Replace this SQL query with whatever
//you want to retrieve. The example below
//will sum up all the bandwidth
//Usage of a specific folder with name
//"userID". Download Log Parser 2.2
//from Microsoft and see sample queries.
strSQL = //the query (i changed it during test)
// run the query against W3C log
rsLP = LogParser.Execute(strSQL, W3Clog);
rowLP = rsLP.getRecord();
Unitsprocessed = rsLP.inputUnitsProcessed;
if (rowLP.getValue(0).ToString() == "0" ||
rowLP.getValue(0).ToString() == "")
{
//Return 0 if an err occured
UsedBW = 0;
return UsedBW;
}
//Bytes to MB Conversion
double Bytes = Convert.ToDouble(rowLP.getValue(0).ToString());
UsedBW = Bytes / (1024 * 1024);
私が見つけた最高のクエリはこれでした、それはレジスター内を検索します(私はそれを変更したので元のクエリを持っていません
ILogRecordset rs = null;
try
{
LogQueryClass qry = new LogQueryClass();
COMRegistryInputContextClass registryFormat = new COMRegistryInputContextClass();
string query = //Chnaged it
rs = qry.Execute(query, registryFormat);
for (; !rs.atEnd(); rs.moveNext())
Console.WriteLine(rs.getRecord().toNativeString(","));
}
finally
{
rs.close();
}
また、ライブオブジェクトとしてではなくSQLにデータを返すように見えるものもあります:|
サービスを作成するので、データを交換するためのデータベースへのアクセスを最小限に抑えたいので、現在のデータを保存するだけです。
- 編集:
追加させてください、私のクエリ( "log parser.exe"引数を渡すことを使用)はこのようなものでしたが、サービス内でexeファイルを呼び出すのはとても失礼です。
myProc.StartInfo.Arguments = " \"select * INTO AuditLogParser from \\\\" + Dns.GetHostName() +
"\\security WHERE TimeGenerated >= '" + startDate +
"' and TimeGenerated <'" + endDate +
"' and (eventid=560 or eventid=540)\" -o:SQL -server:\"" +
Dns.GetHostName() +
"\\sqlexpress\" -database:SecurityLog -driver:\"SQL Server\" -username:TrainAudit -password:Password.110 -createtable:OFF";