Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 需要EventLogQuery时间格式吗?_.net - Fatal编程技术网

.net 需要EventLogQuery时间格式吗?

.net 需要EventLogQuery时间格式吗?,.net,.net,我正在尝试使用EventLogQuery类来查询eventlog。我遵循了上所示的示例 我已经在谷歌搜索了一吨,但找不到任何带有@SystemTime的查询 有人知道我需要使用的日期时间格式吗?到目前为止,我所尝试的一切都返回了无效的查询异常 这里有一个XML示例,其中包含预期日期格式的字符串版本 <TimeCreated SystemTime="2006-02-28T21:51:44.754Z" /> EventLogQuery使用XML格式查询事件日志。 您可以找到查询XML的

我正在尝试使用EventLogQuery类来查询eventlog。我遵循了上所示的示例

我已经在谷歌搜索了一吨,但找不到任何带有@SystemTime的查询

有人知道我需要使用的日期时间格式吗?到目前为止,我所尝试的一切都返回了无效的查询异常

这里有一个XML示例,其中包含预期日期格式的字符串版本

<TimeCreated SystemTime="2006-02-28T21:51:44.754Z" />

EventLogQuery使用XML格式查询事件日志。 您可以找到查询XML的模式

的文本是根据事件的XML序列化计算的XPath表达式

您可以找到事件XML的模式

具有类型为的属性SystemTime,因此查询XML中的该属性的格式是XPath处理器可以解析为有效日期时间的格式。有关详细信息,请参阅

例如,您可以尝试以下查询:

<QueryList>
  <Query Id="0" Path="Application">
    <Select Path="Application">*[System[TimeCreated[@SystemTime = '2011-12-20T00:42:53.000000000Z']]]</Select>
  </Query>
</QueryList>
如果恰好在给定的日期和时间创建了一个事件,它将解析并返回一个值

也是Filter XPath协议的一个扩展函数,它接受一个或两个类型的参数并返回一个数字,因此只需在表达式中使用一个数字,就像在您的示例中一样

另外,您可以使用Windows事件查看器%windir%\system32\eventvwr.msc来输入事件查询XML,并仅通过Windows Vista、7和2008快速评估事件查询XML:


下面是一个初始化EventLogQuery对象的C示例,该对象将只加载最后一天的事件条目

var yesterday = DateTime.UtcNow.AddDays(-1);

var yesterdayDtFormatStr = yesterday.ToString(
   "yyyy-MM-ddTHH:mm:ss.fffffff00K", 
   CultureInfo.InvariantCulture
);

var query = string.Format(
   "*[System/TimeCreated/@SystemTime >='{0}']", 
   yesterdayDtFormatStr
);

var elq = new EventLogQuery("Application", PathType.LogName, query);

下面是另一个用于初始化EventLogQuery对象的C,该对象将加载特定日期范围的事件实体

var startTime = DateTime.Now.AddDays(-1);
var endTime = DateTime.Now;

var query = string.Format("*[System[TimeCreated[@SystemTime >= '{0}']]] and *[System[TimeCreated[@SystemTime <= '{1}']]]",
    startTime.ToUniversalTime().ToString("o"),
    endTime.ToUniversalTime().ToString("o"));

var elq = new EventLogQuery("Applicaton", PathType.LogName, query);
在过去2小时内登录IP列表失败。EventID=4625,CreatedDate>=最后2小时


我感谢你的帮助。但是,你能给我一个例子,说明这个字符串的格式是什么吗?@user1106686我已经编辑了我的答案,将示例中带有字符串datetime的行包括在内。希望这有帮助。谢谢你的好帖子。我想在这里补充一点,这里接受的日期时间格式是dtObj.ToStringO。dtObj是您的起始日期时间对象。
var AfterTime = DateTime.Now.AddMinutes(-120);

string queryString =
                    "<QueryList>" +
                    "  <Query Id='0' Path='Security'>" +
                    $"    <Select Path='Security'>*[System[(EventID=4625) and TimeCreated[@SystemTime&gt;='{AfterTime.ToString("o")}']]]</Select>" +
                    "  </Query>" +
                    "</QueryList>";  

var reader = new EventLogReader(new EventLogQuery("Security", PathType.LogName, queryString));

for (EventRecord eventDetail = reader.ReadEvent(); eventDetail != null; eventDetail = reader.ReadEvent())
{
    if (eventDetail.Id == 4625 && eventDetail.TimeCreated >= AfterTime)// Extra security, check again
    {
                    IPlist.Add(eventDetail.Properties[eventDetail.Properties.Count - 2].Value.ToString()); // Get IP Adress, Last Second Element Has IP Adress
    }

}

var AttackerIP = IPlist.GroupBy(x => x).Select(x => x.Key).ToList();