#powershell #event-viewer
Вопрос:
Я пытаюсь вывести пользователей из событий выхода в рамках безопасности. Используя приведенный ниже код, я могу извлечь имена пользователей, но я не уверен, как изменить его, чтобы также извлечь время из журнала событий?
Большое спасибо
$events = get-eventlog -logname Security -instanceid 4634 -Newest 5
foreach ($ev in $events) {
$me = $ev.Message -match "(Account Name:).*"
if ($me) {
$matches[0]
}
}
Ответ №1:
Я не совсем понимаю, что вы пытаетесь сделать. Однако Get-EventLog
он устарел в пользу Get-WinEvent, который работает быстрее и имеет гораздо лучшие параметры фильтрации, и пример может выглядеть примерно так:
$FilterHash = @{
LogName = 'Security'
Id = 4624
}
Get-WinEvent -FilterHashtable $FilterHash -MaxEvents 5 |
ForEach-Object{
If($_.Properties[1].Value -eq $me) {
Write-Host "Account Name : ($_.Properties[1].Value)"
}
}
Этот -FilterHashtable
параметр является наиболее популярным, но есть также -FilterXPath
и -FilterXML
параметры, которые вы можете посмотреть в документации.
Важно: В моем случае у меня не было 4634 событий. Значение свойства и положение массива можно определить, просмотрев XML-представление данной записи журнала в средстве просмотра событий. Просто посмотрите под этим и посчитайте индексы массива от 0.
Другой способ сделать это-просто выделить одну запись и отобразить свойства на экране, а затем снова просто посчитать, чтобы получить правильный номер индекса. Это важно, потому что разная информация может находиться в разных положениях в разных событиях и т.д.
Get-WinEvent
это действительно надежно. Я настоятельно рекомендую ознакомиться с документацией!