如何按 SID 过滤 Windows 安全事件日志?

如何按 SID 过滤 Windows 安全事件日志?

我想过滤特定用户的事件日志,但我认为没有按 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应该没有问题。lognamepath

答案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 过滤。
但就我个人而言,我还没有用到它们,到目前为止,与消息匹配的内容已经足够了。

相关内容