用于事件过滤的Xpath查询

时间:2014-05-23 12:32:06

标签: xpath event-log

我有当前的过滤逻辑来定义我想要获取的事件

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

请提出正确的解决方案

2 个答案:

答案 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以下似乎可以解决这个问题。

https://social.technet.microsoft.com/Forums/windowsserver/en-US/cda721cc-6479-4b04-9fdd-9ccbec86b159/possible-bug-collecting-security-events-using-event-subscriptions-and-windows-2008-r2?forum=winserverManagement

不确定这是否可以解决您的问题,因为您可能需要超过150个字符。