Очистка журналов событий Windows с помощью PowerShell
В некоторых случаях требуется удалить на компьютере или сервере все записи в журнале событий Windows. Конечно, очистку системных журналов, можно выполнить и из графической оснастки просмотра событий — Eventvwr.msc (ПКМ по нужному журналу ->Clear Log), однако начиная с Vista, в Windows используется несколько десятков журналов для различных компонентов системы, и очищать их все из консоли Event Viewer будет довольно утомительно. Гораздо проще очистить логи из командной строки: с помощью PowerShell или встроенной утилиты wevtutil.
Очистка журналов событий с помощью PowerShell
В том случае, если у вас установлен PowerShell 3 (по умолчанию уже установлен в Windows 8 / Windows Server 2012 и выше), для получения списка журналов и их очистки можно воспользоваться командлетами Get-EventLog и Clear-EventLog.
Запустите консоль PowerShell с правами администратора и с помощью следующей команды выведите список всех имеющихся в системе классических журналов событий с их максимальными размерами и количеством событий в них.
1 |
Get-EventLog –LogName * |
Для удаления всех событий из конкретного журнала событий (например, журнала System), воспользуйтесь командой:
1 |
Clear-EventLog –LogName System |
В результате, все события из этого журнала будут удалены, а в журнале события останется только одно событие EventId 104 с текстом «The System log file was cleared».
Для очистки всех журналов событий нужно бы перенаправить имена журналов в конвейер, однако, к сожалению это запрещено. Поэтому нам придется воспользоваться циклом ForEach:
1 |
Get-EventLog -LogName * | ForEach { Clear-EventLog $_.Log } |
Таким образом, будут очищены все классические журналы EventLogs.
Очистка журналов с помощью консольной утилиты WevtUtil.exe
Для работы с событиями в Windows уже довольно давно имеется в наличии мощная утилита командой строки WevtUtil.exe. Ее синтаксис немного сложноват на первый взгляд. Вот, к примеру, что возвращает help утилиты:
Чтобы вывести список зарегистрированных в системе журналов событий, выполните команду:
1 |
WevtUtil enum-logs |
или более короткий вариант:
1 |
WevtUtil el |
На экране отобразится довольно внушительный список имеющихся журналов.
Примечание. Посчитать их количество можно с помощью команды WevtUtil el |Measure-Object. В моем случае, в Windows 10 насчитывается 1053 различных журналов).
Можно получить более подробную информацию по конкретному журналу:
1 |
WevtUtil gl Setup |
Очистка событий в конкретном журнале выполняется так:
1 |
WevtUtil cl Setup |
Перед очисткой можно создать резервную копию событий в журнале, сохранив их в файл:
1 |
WevtUtil cl Setup /bu:SetupLog_Bak.evtx |
Чтобы очистить сразу все журналы, можно воспользоваться командлетом Powershell Get—WinEvent для получения всех объектов журналов и Wevtutil.exe для их очистки:
1 |
Get-WinEvent -ListLog * -Force | % { Wevtutil.exe cl $_.LogName } |
или так
1 |
Wevtutil el | ForEach { wevtutil cl “$_”} |
Примечание. В нашем примере не удалось очистить 3 журнала из-за ошибки доступа. Стоит попробовать очистить содержимое этих журналов из консоли Event Viewer.
Очистка журналов может быть выполнена и из классической командной строки:
1 |
for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1" |