PowerShell用通配符过滤UMFD、DWM开头的安全日志数组行
解决方案
你需要的过滤逻辑可以直接追加在原有管道中实现,利用PowerShell内置的Where-Object条件筛选即可,针对UMFD-xx、DWM-xx这类前缀固定、后缀可变的用户名,使用通配符匹配规则过滤即可。
修改后完整代码
$FromDate = (Get-Date).AddSeconds(-3) $ToDate = Get-Date $L = Get-Events -LogName 'Security' -Id 4625,4647,4648 -DateFrom $FromDate -DateTo $ToDate ` -NamedDataExcludeFilter @{ 'TargetUserName' = 'System','Network Service','Local Service' } | ` # 新增过滤规则:排除UMFD和DWM开头的用户名 Where-Object { $_.TargetUserName -notlike 'UMFD-*' -and $_.TargetUserName -notlike 'DWM-*' } | ` Sort-Object TimeCreated if ( $L.Count -ne 0 ) { "From: ", $FromDate, " to ", $ToDate | Out-File -FilePath C:\Users\Scomage\Documents\SecLog.txt -Append -Width 500 -NoNewline $L | Format-Table -Property Date, Id, LogonType, LogonProcessName, TargetUserName, IpAddress, IpPort, TargetLogonId, Action, KeywordDisplayName | ` Out-File -FilePath C:\Users\Scomage\Documents\SecLog.txt -Append -Width 500 }
补充说明
- 如果你后续需要新增其他前缀的过滤规则,直接在
Where-Object的判断条件里追加-and $_.TargetUserName -notlike '前缀-*'即可 - 如果你需要更高的匹配精度,也可以把条件替换为
$_.TargetUserName -notmatch '^(UMFD|DWM)-\d+$',会严格校验后缀为数字的格式 - 当前返回的结果集规模很小,新增这个过滤步骤不会有任何性能损耗,不需要修改原有
Get-Events的调用逻辑,调试也更方便
内容的提问来源于stack exchange,提问作者Jerry Welliver
相关产品推荐
相关产品推荐

