我遇到使用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) <= 180000]]]
and
*[EventData[Data[@Name='NewProcessName'] !='C:\Windows\System32\cmd.exe' and
Data[@Name='SubjectUserName'] !='HanSolo']]
</Select>
</Query>
</QueryList>
"@
$event10 = Get-WinEvent -Filterxml $filterXml
答案 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']]