我有当前的过滤逻辑来定义我想要获取的事件
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[(EventID=4624 or EventID=4625)]]
and
*[EventData[Data[@Name='TargetUserName'] != 'ANONYMOUS LOGON']]
and
*[substring([EventData[Data[@Name='TargetUserName']]],2,1) != '-']
</Select>
</Query>
</QueryList>
但是那部分&#34; * [substring([EventData [Data [@Name =&#39; TargetUserName&#39;]]],2,1)!=&#39; - &#39;] &#34;导致错误,因为它没有被解析。
我想丢弃某些以&#39; L - &#39;开头的目标用户名。和&#39; D - &#39;和&#39; C:/&#39;。
请提出正确的解决方案
答案 0 :(得分:1)
我猜测,基于你编写第三个XPath表达式的方式,你有一个这样的结构:
...
<Any-Element>
<EventData>L-username
<Data Name='TargetUserName'>xxx</Data>
</EventData>
</Any-Element>
...
然后你可以使用这个表达式来获得你想要的东西:
*[substring(EventData[Data[@Name='TargetUserName']], 2, 1) = '-']
但我怀疑情况并非如此,因为你的第二个表达式比较了<Data>
元素的内容(而不是<EventData>
的内容,你没有提到它失败了。所以可能上面的xxx
字符串是您的用户名所在的位置。如果是这种情况,您应该比较Data
而不是EventData
的内容:
*[EventData[substring(Data[@Name='TargetUserName'], 2, 1) = '-']]
答案 1 :(得分:1)
我发现如果您更改查询以拉取应用程序或系统日志,则不会得到相同的错误。安全日志似乎存在错误。另一篇文章表明,将字符长度减少到150以下似乎可以解决这个问题。
不确定这是否可以解决您的问题,因为您可能需要超过150个字符。