gpt4 book ai didi

c# - Log Parser——通过MSUtill查询,通过C#代码读取记录

转载 作者:行者123 更新时间:2023-12-02 05:44:07 26 4
gpt4 key购买 nike

我找到了很多关于 Log Parser 的主题,但没有一个能满足我的愿望,

我需要在日志解析器上应用这个查询从安全中选择 *

然后获取事件行,然后逐行读取它们,知道我访问的是哪一列...

请帮忙...

应该写什么:1.通过LogParser.dll查询Windows事件(使用MSUtill库)2.获取行并将其放入任何容器中3.逐行阅读4.能够分隔行的每个单元格,并分别读取它们,如访问事件ID列或消息列......


--针对问题

有些东西,但我没有得到它们,例如,这个人使用这个,单行,但我需要多行,我想知道接下来要转换什么:|我需要使用什么类(class)

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);

我找到的最好的查询是这个,它在 registery 中搜索(我没有原始查询,因为我改变了它

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";

最佳答案

以下示例代码使用 LogParser 从名为 C:\Bat 的本地目录读取文件名和大小

LogQueryClass logQuery = new LogQueryClassClass();

COMFileSystemInputContextClass inputFormat = new COMFileSystemInputContextClassClass();
inputFormat.recurse = 0;

String strQuery = @"SELECT Name, Size FROM 'C:\Bat\*.*' ORDER BY Name ASC";

ILogRecordset results = logQuery.Execute(strQuery, inputFormat);
while (! results.atEnd())
{
Console.WriteLine(String.Format("File: {0} Size: {1}", results.getRecord().getValue("Name"), results.getRecord().getValue(1)));
results.moveNext();
}

请注意,我可以通过查询中的列名或列索引访问该列。

关于c# - Log Parser——通过MSUtill查询,通过C#代码读取记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10518927/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com