Я хочу отфильтровать журнал событий для определенного пользователя, но не думаю, что есть возможность поиска по 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
key, возвращается длинный список, так что с logname
или path
.
Использовать -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"]]
Я не знаю ни одного встроенного способа узнать, существует ли конкретный 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.
Но лично мне они пока не нужны, и пока достаточно контента, соответствующего сообщению.