Просмотр логов Windows на удаленном компьютере с помощью Powershell

Powershell Logo

Для просмотра логов Windows можно использовать команды Get-WinEvent и Get-EventLog

Get-EventLog получает список журналов или событий в заданном журнале на локальном или удалённом компьютере. Указывая нужные параметры для Get-EventLog, можно с лёгкостью искать искомые события по значениям их свойств. Get-EventLog возвращает события, соответствующие всем указанным значениям свойств. Командлет Get-EventLog работает только со стандартными классическими журналами событий Windows. Если нужно искать по остальным событиям из журналов Windows, используйте командлет Get-WinEvent.

Представим, что вам нужна основная информация о журналах событий на вашем компьютере. В этом случае убедитесь, что вы включили параметр list при вызове Get-EventLog:

Get-EventLog -list

Если вам нужна только информация о конкретном журнале событий, используйте командлет Where-Object, чтобы ограничить извлечение данных конкретным журналом событий:

Get-EventLog -list | Where-Object {$_.logdisplayname -eq "Application"}

Эта команда извлекает все события в журнале событий системы:

Get-EventLog system

После выполнения команды выше на экран будет выведено слишком много данных. Используйте параметр -Newest и верните только нужное количество последних событий, записанных в журнале. Например, эта команда извлекает последние 10 событий, записанные в журнал событий системы:

Get-EventLog System -newest 10

Вот данные, которые вы получите:

Чтобы получить более подробную информацию, просто добавьте командлет Format-List:

Get-EventLog System -newest 10 | Format-List

Полученная информация будет уже такой:

Вы также можете передавать данные через командлет Where-Object для возврата подмножества событий. Например, эта команда извлекает только те события в журнале событий Windows PowerShell, у которых значение EventID равно 403:

Get-EventLog "Windows PowerShell" | Where-Object {$_.EventID -eq 403}

Вот небольшая команда, которая извлекает все события в журнале событий Windows PowerShell, а затем использует командлет Group-Object для группировки этих событий с помощью EventID. Другими словами, команда подсчитывает общее количество событий для каждого идентификатора (например, произошло два события с EventID 300, произошло шесть событий с событием EventID 400 и т. Д.). Затем эти данные передаются через командлет Sort-Object для предоставления результатов, отсортированных по EventID. Вот команда:

Get-EventLog "Windows PowerShell" | Group-Object eventid | Sort-Object Name

Примеры использования Get-Eventlog:

Поиск событий по ID после 3 июля:

Get-EventLog -ComputerName compname -After 03/07/2017 -LogName System | Where-Object {$_.EventID -eq "6005"}

Поиск в логах нескольких серверов:

$servers = "compname1", "compname2", "compname3"
ForEach ($Server in $servers) {$Server; Get-EventLog -LogName System -Computername $Server |  Where-Object {$_.EventID -eq "6005"}}

Возвращает все события журнала Windows PowerShell, в сообщениях которых содержится слово "failed":

Get-Eventlog -logname "Windows PowerShell" -message "*failed*"

Поиск событий, статус которых "Ошибка":

Get-Eventlog -logname System -EntryType Error

 

Командлет Get-WinEvent берёт данные из журналов событий, а именно - стандартные журналы событий, события приложений и системы. Если вызвать команду Get-WinEvent без параметров, то будут показаны все события из журналов событий компьютера. Для прерывания выполнения команды нажмите сочетание клавиш CTRL+C. Стоит отметить то, что Get-WinEvent работает только в Windows Vista, Windows Server 2008 R2 и старше. Также потребуется установленная платформа Microsoft .NET Framework 3.5 или новее.

Примеры использования Get-Winevent:

Поиск в логе System по ID 6005:

Get-WinEvent -ComputerName compname -LogName system | where {$_.id -eq "6005"}

Поиск событий за последние 40 дней:

$yesterday = (get-date) - (new-timespan -day 40)
Get-WinEvent -FilterHashTable @{LogName='system';StartTime=$yesterday; id='6005'}

Поиск событий за последние 5 дней для Outlook:

$starttime = (get-date).adddays(-5)	
Get-WinEvent -ComputerName compname -FilterHashtable @{logname="application"; ProviderName="outlook"; StartTime= $starttime}

Поиск в логах нескольких серверов:

$servers = "compname1", "compname2", "compname3"
ForEach ($Server in $Servers) {$Server; Get-WinEvent -LogName System -MaxEvents "2" -Computername $Server}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *