gpt4 book ai didi

xpath - 使用 xpath 从 wevtutil 中选择前 10 个事件

转载 作者:行者123 更新时间:2023-12-03 15:54:52 27 4
gpt4 key购买 nike

我目前正在从事一个使用 Windows 事件日志的项目。我正在使用 wevtutil 从事件日志中获取结果。我知道 wevtutil 支持 xpath 查询,但由于我是 xpath 的新手,所以我不知道我能否实现我想要做的事情。

在 SQL 中,我会做的是这样的:

SELECT log.*, COUNT(1) numHits
FROM Application log
GROUP BY Source, Task, Level, Description
ORDER BY numHits DESC
LIMIT 10

是否可以使用 xpath 做这样的事情?

编辑:这是一个示例事件:


<Event xmlns='http://schemas.microsoft.com/win/2004/08/events/event'>

<System>
<Provider Name='MSSQL$SQLEXPRESS' />
<EventID Qualifiers='16384'>17403</EventID>
<Level>4</Level>
<Task>2</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime='2010-10-20T20:06:18.000Z' />
<EventRecordID>9448</EventRecordID>
<Channel>Application</Channel>
<Computer>SHAZTOP</Computer>
<Security />
</System>
<EventData>
<Data>73094</Data>
<Binary>
FB4300000A000000130000005300480041005A0054004F0050005C00530051004C004500580050005200450053005300000000000000</Binary>
</EventData>
</Event>

最佳答案

XPath 1.0 有四种数据类型:字符串、数字、 bool 值和节点集。

唯一的 XPath 排序标准是文档顺序(在给定的轴方向)。这就是您可以限制任何结果节点集的方法,因为@Dimitre 和@Welbog 已使用 fn:position() 提出建议。

但是,没有规范要求 XPath 引擎必须以任何给定顺序提供节点集结果。因此,您不能在 XPath 1.0 中进行排序或分组。您可以选择每个组中的第一个,但效率不高。例如:

//Event[not(System/Level = preceding::Level) or 
not(System/Task = preceding::Task)]

XPath 2.0 具有序列数据类型。序列具有明确的构造顺序。所以,你可以分组。例如:

for $event (//Event)[index-of(//Event/System/concat(Level,'++',Task),
System/concat(Level,'++',Task))[1]]
result //Event[System/Level = $event/System/Level]
[System/Task = $event/System/Task]

但是,因为 XPath 2.0 没有内置的排序和递归机制(你可以提供一个扩展函数......)你不能排序。

为此,您需要一种具有内置排序的语言或一种表达其算法的方式。 XSLT(1.0 或 2.0)和 XQuery 都具有这些特性。

关于xpath - 使用 xpath 从 wevtutil 中选择前 10 个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3990478/

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