我在使用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) <= 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']]