我想过滤特定用户的事件日志,但我认为没有按 SAMID 搜索的选项。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
答案1
请使用该-FilterXPath
选项!
在以下示例中,我已将计算机上的安全日志中的所有事件保存到seclog.evtx
桌面,并使用 SubjectUserSid S-1-5-18
( LOCAL SYSTEM
) 搜索事件:
$events = Get-WinEvent -Path "$HOME\Desktop\seclog.evtx" -FilterXPath '*[EventData[Data[@Name="SubjectUserSid"] = "S-1-5-18"]]'
在剧本中,我可能会选择一个溅射表格使语句更易读一些(此处仅限于最近 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"]]
答案2
我不知道有任何内置方法可以查明特定 UserID 是否存在。
但是,您只需匹配消息的内容即可找到您的 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 过滤。
但就我个人而言,我还没有用到它们,到目前为止,与消息匹配的内容已经足够了。