我想筛选特定用户的事件日志,但我不认为有一个选项可以通过SAMID进行search。 根据这里 , UserId有一个filter。 以下正确的语法是否正确地在下面的屏幕截图中search用户?
$events = get-winevent -filterhashtable @{ logname='security'; path="Archive-Security-2015-04-14-02-13-02-299.evtx"; UserId='S-1-5-21-220523388-838170752-839522115-yyyy' }

我得到“找不到符合指定select标准的事件”。 用上面的命令。 但是,如果我删除UserId键,返回一个长列表,所以应该没有错误的logname或path 。
改为使用-FilterXPath选项!
在以下示例中,我已将我机器上安全日志中的所有事件保存到seclog.evtx上的seclog.evtx ,并使用SubjectUserSid S-1-5-18 ( LOCAL SYSTEM )search事件:
$events = Get-WinEvent -Path "$HOME\Desktop\seclog.evtx" -FilterXPath '*[EventData[Data[@Name="SubjectUserSid"] = "S-1-5-18"]]'
在脚本中,我可能会select使用splatting表来使语句更具可读性(这里限于最后10个事件):
$seclogSplat = @{ 'Path' = "$HOME\Desktop\seclog.evtx" 'FilterXPath' = '*[EventData[Data[@Name="SubjectUserSid"] = "S-1-5-18"]]' 'MaxEvents' = 10 } $events = Get-WinEvent @seclogSplat
您可以使用or指定多个非排他性标准:
*[EventData[Data[@Name="SubjectUserSid"] = "S-1-5-18" or Data[@Name="SubjectUserSid"] = "S-1-0-0"]]
我不知道是否有任何内置的方式来确定是否存在特定的用户标识。
然而,你可以匹配消息的内容来find你的SiD,因为它应该是唯一的:
$ events = get-winevent -logname security -path“Archive-Security-2015-04-14-02-13-02-299.evtx”| 其中{$ _。message -match'S-1-5-21-220523388-838170752-839522115-yyyy'}
还有一些更清洁的方式使用XML过滤。
但个人来说,我还没有对它们有所需求,目前与消息相匹配的内容已经足够了。