⚙️ Проверка журналов событий Windows с помощью Powershell |

⚙️ Проверка журналов событий Windows с помощью Powershell

Мануал

Для проверки журналов Windows обычно используется графическая консоль Event Viewer (Eventvwr.msc).

Event Viewer предоставляет информацию о большинстве системных событий и событий безопасности.

Вы можете использовать PowerShell для поиска, фильтрации и разбора большого количества событий в Event Viewer.

В Windows есть две встроенные команды PowerShell для получения информации из журналов Event Viewer:

  • Get-Eventlog – простая, удобная и быстрая команда для получения информации из стандартных журналов Windows: Application, Security, System. Однако ее нельзя использовать для получения событий из расширенных журналов приложений и служб в Event Viewer;
  • Get-WinEvent – обеспечивает более универсальный способ поиска и фильтрации событий в любом из журналов, доступных в Event Viewer. В современных версиях Windows эта команда является предпочтительным способом получения и обработки журналов событий.

Чтобы получить имена доступных журналов Windows, выполните команду:

Get-WinEvent -ListLog *

По умолчанию в Windows 10 и 11 существует более 400 журналов событий.

Каждый журнал хранится в отдельном файле .EVTX в каталоге %SystemRoot%\System32\Winevt\Logs\.

Чтобы отобразить последние 10 событий из определенного журнала, укажите имя журнала в параметре -LogName, а затем выполните команду:

Get-WinEvent -LogName 'Microsoft-Windows-Windows Defender/Operational' -MaxEvents 10

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

Например, вам нужно найти все события Windows Defender с идентификатором события 1002:

Get-WinEvent -LogName 'Microsoft-Windows-Windows Defender/Operational'| Where-Object ID -eq 1002

Однако если у вас большое количество событий, такой способ фильтрации будет очень медленным.

Для более быстрого поиска в журнале можно использовать следующие фильтры Get-WinEvent:

  • -FilterXPath <String>
  • -FilterXml <XmlDocument>
  • -FilterHashtable <Hashtable[]>

Например, чтобы получить те же результаты, что и в предыдущей команде, можно использовать следующий запрос к хэш-таблице

Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-Windows Defender/Operational';ID='1002'}

Эта команда поиска в журнале во много раз быстрее, чем предыдущая (с фильтрацией по Where-Object).

Пример хэш-таблицы для поиска нескольких идентификаторов событий за последние 7 дней:

date = (Get-Date).AddDays(-7)
hash = @{
LogName='Security';
ProviderName='Microsoft-Windows-Security-Auditing';
ID=4723,4724,4740;
StartTime=$date
}
Get-WinEvent -FilterHashtable $hash

Вы можете создать шаблон фильтра XPath для выбора событий из журнала с помощью графической оснастки Event Viewer.

  • Щелкните правой кнопкой мыши нужное имя журнала и выберите Filter Current Log (Фильтр текущего журнала);
  • Настройте параметры фильтра;

Перейдите на вкладку XML.

Скопируйте код запроса XPath, который будет создан;

Вставьте этот код в переменную $xmlQuery, чтобы запустить этот запрос с помощью PowerShell:

xmlQuery = @'
<QueryList>
<Query Id="0" Path="Application">
<Select Path="Application">*[System[(Level=1 or Level=2) and (EventID=2 or EventID=8194 or EventID=100 or EventID=264) and TimeCreated[timediff(@SystemTime) &lt;= 604800000]]]</Select>
</Query>
</QueryList>
'@

Используйте XML-запрос для выбора событий:

Events= Get-WinEvent -FilterXML $xmlQuery

Теперь вы можете экспортировать найденные события в CSV-файл:

Events | Export-CSV "C:\Report\LastEvents.CSV" -NoTypeInformation -Encoding UTF8

Можно получить журналы с удаленного компьютера с помощью параметра -ComputerName.

Например, следующий скрипт PowerShell можно использовать для поиска контроллеров домена для событий блокировки учетных записей пользователей AD (идентификатор события 4740):

DCs = "dc01", "dc02", "dc03"
foreach ($server in $DCs)

см. также:

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий