gpt4 book ai didi

c# - 将事件查看器日志文件导出为 *.evtx 文件

转载 作者:行者123 更新时间:2023-11-30 17:29:38 25 4
gpt4 key购买 nike

我正在尝试从事件查看器中导出信息。

我正在尝试用 EventLogSession 来做到这一点所以我可以使用 .evtx 格式,而不仅仅是文本文件。

public static void ExportEventViewerLog(int YearsAgo = 0, int MonthsAgo = 0, int DaysAgo = 0)
{
int Year = 0;
int Month = 0;
int Day = 0;

if (YearsAgo != 0)
{
Year = YearsAgo;
}
else if (MonthsAgo != 0)
{
Month = MonthsAgo;
}
else if (DaysAgo != 0)
{
Day = DaysAgo;
}

DateTime previousDate = DateTime.Now.AddYears(-Year).AddMonths(-Month).AddDays(-Day);
DateTime now = DateTime.Now.Date;

Console.WriteLine(previousDate.ToString("yyyy-MM-dd"));
//2018-06-12
Console.WriteLine(now.ToString("hh:mm:ss"));
//12:00:00

string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "test.evtx");
string query = "<QueryList> " + $@"<Select Path=""Application"">*[System[(Level=1 or Level=2 or Level=3 or Level=4 or Level=0 or Level=5) and TimeCreated[@SystemTime&gt;='{previousDate.ToString("yyyy-MM-dd")}T{previousDate.ToString("hh:mm:ss")}.000Z' and @SystemTime&lt;='{now.ToString("yyyy-MM-dd")}T{now.ToString("hh:mm:ss")}.999Z']]]</Select> " + "</Query> " + "</QueryList>";

EventLogSession eventLogSession = new EventLogSession();
eventLogSession.ExportLogAndMessages("Application", PathType.LogName, query, path, false, CultureInfo.CurrentCulture);
}

我是这样调用它的

static void Main()
{
ExportEventViewerLog(YearsAgo: 0, MonthsAgo: 0, DaysAgo: 1);
Console.WriteLine("Press Any Key To Exit");
Console.ReadKey();
}

这里是错误

System.Diagnostics.Eventing.Reader.EventLogException

System.Diagnostics.Eventing.Reader.EventLogException
HResult=0x80131500
源=System.Core
堆栈跟踪:
在 System.Diagnostics.Eventing.Reader.EventLogException.Throw(Int32 errorCode)
在 System.Diagnostics.Eventing.Reader.NativeWrapper.EvtExportLog(EventLogHandle session ,字符串 channelPath,字符串查询,字符串 targetFilePath,Int32 标志)
在 System.Diagnostics.Eventing.Reader.EventLogSession.ExportLog(字符串路径,PathType pathType,字符串查询,字符串 targetFilePath, bool tolerateQueryErrors)
在 System.Diagnostics.Eventing.Reader.EventLogSession.ExportLogAndMessages(字符串路径、PathType 路径类型、字符串查询、字符串 targetFilePath、 bool tolerateQueryErrors、CultureInfo targetCultureInfo)
在 app.Program.ExportEventViewerLog(Int32 YearsAgo, Int32 MonthsAgo, Int32 DaysAgo) 在 C:\Users\User\app\Program.cs:line 296
C:\Users\User\Google Drive\app\Program.cs 中的 atapp_1._0.Program.Main():第 34 行

注意:我不认为路径是问题,因为如果我将查询更改为通配符 *,该方法将执行而不会出现任何错误,我从 事件生成了查询查看器 -> 过滤当前日志 -> xml

这是从事件查看器生成的原始查询

<QueryList>
<Query Id="0" Path="Application">
<Select Path="Application">*[System[(Level=1 or Level=2 or Level=3 or Level=4 or Level=0 or Level=5) and TimeCreated[@SystemTime&gt;='1991-07-24T21:12:12.000Z' and @SystemTime&lt;='2018-06-12T21:12:12.999Z']]]</Select>

最佳答案

您缺少 XML 标记:

<Query Id=\"0\" Path=\"Application\">

修复这个问题仍然会导致我出现异常,即使是作为管理员,但是使用不同的路径修复它(可能是因为事件查看器服务缺少对用户路径的权限)

string path = Path.Combine(Path.GetTempPath(), "test.evtx");

关于c# - 将事件查看器日志文件导出为 *.evtx 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50837866/

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