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



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

我要做的是让XML查询在过去5分钟内创建的安全日志中找到事件号4688,并且该部分工作正常。我还需要排除具有新进程name = C:WindowsSystem32cmd.exe Subjectusername = HanSolo的事件。

我当前的过滤器排除了NewProcessName = C:WindowsSystem32cmd.exe的所有事件,而不管SubjectUserName,并排除了SubjectUserName = HanSolo的所有事件。我需要在同一事件中排除C:WindowsSystem32cmd.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:WindowsSystem32cmd.exe' and 
            Data[@Name='SubjectUserName'] !='HanSolo']]
      </Select>
   </Query>
</QueryList>
"@
$event10 = Get-WinEvent -Filterxml $filterXml 

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

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

and
*[EventData[Data[@Name='NewProcessName'] !='C:WindowsSystem32cmd.exe' or 
            Data[@Name='SubjectUserName'] !='HanSolo']]

最新更新