我想过滤某个用户的事件日志,但我认为没有选择通过SAMID进行搜索.根据
here,UserId有一个过滤器.以下正确的语法是否正确,以便在下面的屏幕截图中搜索用户?
$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' }
我得到“没有找到符合指定选择标准的事件.”用上面的命令.但是如果我删除了UserId键,则会返回一个长列表,因此logname或path应该没有任何问题.
请改用-FilterXPath选项!
在以下示例中,我将所有事件从我的计算机上的安全日志保存到桌面上的seclog.evtx,并使用SubjectUserSid S-1-5-18(本地系统)搜索事件:
$events = Get-WinEvent -Path "$HOME\Desktop\seclog.evtx" -FilterXPath '*[EventData[Data[@Name="SubjectUserSid"] = "S-1-5-18"]]'
在脚本中,我可能会选择splatting表来使语句更具可读性(这里仅限于最后10个事件):
$seclogSplat = @{ 'Path' = "$HOME\Desktop\seclog.evtx" 'FilterXPath' = '*[EventData[Data[@Name="SubjectUserSid"] = "S-1-5-18"]]' 'MaxEvents' = 10 } $events = Get-WinEvent @seclogSplat
您可以使用或指定多个非排他性条件:
*[EventData[Data[@Name="SubjectUserSid"] = "S-1-5-18" or Data[@Name="SubjectUserSid"] = "S-1-0-0"]]