Powershell: Как извлечь сообщение и время просмотра событий

#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 это действительно надежно. Я настоятельно рекомендую ознакомиться с документацией!