通过AND使用两个条件对事件日志进行XML过滤

时间:2016-09-16 18:15:25

标签: powershell

我遇到使用XML查询过滤Windows事件日志的问题。

我要做的是在最近5分钟内创建的安全日志中找到XML查询查找事件编号4688,该部分工作正常。 我还需要排除包含新流程name = C:\Windows\System32\cmd.exe Subjectusername = HanSolo的事件。

我的当前过滤器会排除NewProcessName = C:\Windows\System32\cmd.exe的所有事件,而不考虑SubjectUserName并排除SubjectUserName = HanSolo的所有事件。我需要在同一事件中排除C:\ Windows \ System32 \ cmd.exe和HanSolo的组合。

$filterxml = @"

<QueryList>
   <Query Id="0" Path="Security">
     <Select Path="Security">*[System[(EventID=4688) and TimeCreated[timediff(@SystemTime) &lt;= 180000]]]

and

*[EventData[Data[@Name='NewProcessName'] !='C:\Windows\System32\cmd.exe' and 
            Data[@Name='SubjectUserName'] !='HanSolo']]

      </Select>
   </Query>
</QueryList>

"@

$event10 = Get-WinEvent -Filterxml $filterXml 

1 个答案:

答案 0 :(得分:0)

假设两个条件的组合是a && b,它的排除/反转是!(a && b),它通过每个操作数的反转以及逻辑运算!a || !b进行扩展,所以我们在这里:

and
*[EventData[not(Data[@Name='NewProcessName'] = 'C:\Windows\System32\cmd.exe' and 
                Data[@Name='SubjectUserName'] ='HanSolo')]]

and
*[EventData[Data[@Name='NewProcessName'] !='C:\Windows\System32\cmd.exe' or 
            Data[@Name='SubjectUserName'] !='HanSolo']]