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

Old*_*zer 4 powershell windows-event-log powershell-v3.0

我想过滤某个用户的事件日志,但我认为没有按 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' }
Run Code Online (Sandbox Code Playgroud)

活动

我收到“未找到符合指定选择标准的事件”。用上面的命令。但是,如果我删除UserId密钥,则会返回一长串列表,因此lognameor应该没有问题path

Mat*_*sen 6

请改用该-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"]]'
Run Code Online (Sandbox Code Playgroud)

在脚本中,我可能会选择一个splatting table 来使语句更具可读性(这里仅限于最后 10 个事件):

$seclogSplat = @{
    'Path'        = "$HOME\Desktop\seclog.evtx"
    'FilterXPath' = '*[EventData[Data[@Name="SubjectUserSid"] = "S-1-5-18"]]'
    'MaxEvents'   = 10
}
$events = Get-WinEvent @seclogSplat
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令指定多个非排他性条件or

*[EventData[Data[@Name="SubjectUserSid"] = "S-1-5-18" or Data[@Name="SubjectUserSid"] = "S-1-0-0"]]
Run Code Online (Sandbox Code Playgroud)