使用get-eventlog查询安全日志时如何排除指定用户
问题原因
- 第一种写法错误:你将过滤逻辑写在了
Select的计算属性定义块内,该位置仅支持定义新属性的生成规则,无法执行过滤逻辑,完全不会生效。 - 第二种写法错误:
Get-EventLog返回的安全事件原生对象没有username属性,4663事件的关联用户名存储在ReplacementStrings数组的索引1位置,调用不存在的属性自然无法完成过滤。
另外建议将过滤操作放在Select之前执行,不需要处理无用对象,查询性能会更高。
正确实现示例
要排除指定用户的日志,修改后的完整脚本如下:
Get-EventLog -LogName Security -InstanceId 4663 -After (Get-Date).AddMonths(-1) -Before (Get-Date) | # 先过滤指定用户,完全匹配用 -ne,模糊匹配用 -notlike 配合通配符 * Where-Object { $_.ReplacementStrings[1] -ne "user" } | Select-Object TimeWritten, @{Name="Account Name";Expression={ $_.ReplacementStrings[1]}}, @{Name="Object Name";Expression={$_.ReplacementStrings[6]}} | Export-Csv "archive $(Get-Date -UFormat "%m.%d.%Y").csv" -NoTypeInformation
补充说明
如果需要模糊匹配过滤,比如排除所有用户名以user开头的记录,将过滤条件改为$_.ReplacementStrings[1] -notlike "user*"即可,-notlike运算符需要配合通配符*使用才能实现模糊匹配效果。
内容的提问来源于stack exchange,提问作者NetAdmin
相关产品推荐
相关产品推荐

