Як швидко очистити всі категорії журналів подій Windows


17

У Windows 7 відкривається програма перегляду подій для перегляду кількох категорій. Ви також можете очистити одну категорію, натиснувши Очистити журнал ... на правій панелі.

Припустимо, що я хочу очистити ВСІ категорії, чи повинен я клацнути та очистити їх по черзі?
Їх десятки. Чи є швидший шлях? Можливо, з PowerShell?

введіть тут опис зображення введіть тут опис зображення

Відповіді:


18

Спробуйте WEvtUtil.exe

За допомогою GUI немає можливості одразу очистити всі журнали. Принаймні, не те, що я коли-небудь знаходив. :)

Петля та видалення з проміжним файлом

Ось пакетний файл, який використовує WEVTUTIL.exe, щоб перелічити журнали до текстового файлу, а потім використати цей текстовий файл для видалення кожного з журналів.

WEVTUTIL EL > .\LOGLIST.TXT
for /f %%a in ( .\LOGLIST.TXT ) do WEVTUTIL CL "%%a"
del .\LOGLIST.TXT
timeout 30

Якщо ви відчуваєте себе небезпечно мати все це в одному пакетному файлі, тоді ви можете зберегти це у двох окремих файлах, а потім запустити один за одним:
(Пакет "Nuke" просто помилиться, якщо він не знайде "loglist.txt "у поточному каталозі.)

Населення-LogList.cmd

@ECHO OFF
REM Source: /superuser//a/655185/389368
WEvtUtil.exe enum-logs > .\LOGLIST.TXT

Nuke-LogList.cmd

@ECHO OFF
REM Source: /superuser//a/655185/389368
for /f %%a in ( .\LOGLIST.TXT ) do WEvtUtil.exe clear-log "%%a"
del .\LOGLIST.TXT
timeout 30

Цикл та видалення безпосередньо

Як зазначив Логман у своїй відповіді , це можна додатково скоротити (і усунути необхідність проміжного текстового файлу), використовуючи щось на кшталт (подвійний% для пакетного файлу):

for /f %%a in ('WEVTUTIL EL') do WEVTUTIL CL "%%a"
timeout 30

Біжи як адміністратор!

Який би спосіб ви не вибрали, переконайтеся, що ви «Запустити як адміністратор»

Найпростіше рішення, яке я знайшов. Використовували його з Vista. :)


Я розглядав можливість використання WMI в сценарії python або подібному - дуже хороший приклад того, як пакет може бути простішим рішенням у певних сценаріях.
Лейл Браун

Вихід CMD + Огляд глядача подій . Використовували ваш другий приклад через batch як адміністратор. Неможливо видалити деякі категорії? Дивно. А категорія Powershell все ще має 11.511 подій? Здається, всі інші очищені
nixda

Накручений відсутністю цитат. вибачте з цього, виправив це. :)
Ƭᴇcʜιᴇ007

Чи можливо використовувати це рішення або запропоноване @Logman у Windows XP? Я не бачу, щоб це було wevtutilв системі.
Sopalajo de Arrierez

1
@SopalajodeArrierez "wevtutil" доступний лише з Vista та вище ... technet.microsoft.com/en-us/library/cc732848.aspx
Логмана

19

Відкрийте підказку cmd або створіть пакетний сценарій і "запустіть як адміністратор":

for /f %x in ('wevtutil el') do wevtutil cl "%x"

Код Powershell для очищення всіх журналів подій:

wevtutil el | Foreach-Object {Write-Host "Clearing $_"; wevtutil cl "$_"}

або виберіть у сценарії:

wevtutil.exe cl Analytic
wevtutil.exe cl Application
wevtutil.exe cl DirectShowFilterGraph
wevtutil.exe cl DirectShowPluginControl
wevtutil.exe cl EndpointMapper
wevtutil.exe cl ForwardedEvents
wevtutil.exe cl HardwareEvents
wevtutil.exe cl Internet Explorer
wevtutil.exe cl Key Management Service
wevtutil.exe cl MF_MediaFoundationDeviceProxy
wevtutil.exe cl "Media Center"
wevtutil.exe cl MediaFoundationDeviceProxy
wevtutil.exe cl MediaFoundationPerformance
wevtutil.exe cl MediaFoundationPipeline
wevtutil.exe cl MediaFoundationPlatform
wevtutil.exe cl Microsoft-IE/Diagnostic
wevtutil.exe cl Microsoft-IEFRAME/Diagnostic
wevtutil.exe cl Microsoft-PerfTrack-IEFRAME/Diagnostic
wevtutil.exe cl Microsoft-PerfTrack-MSHTML/Diagnostic

тощо ...

Ви можете отримати повний перелік усіх назв категорій подій, ввівши наступне в cmd-підказці або в панелі повноважень:

wevtutil el

Більше інформації можна знайти в MS TechNet . Приклади:

Експортуйте події з системного журналу в C: \ backup \ system0506.evtx:

wevtutil epl System C:\backup\system0506.evtx

Очистіть усі події з журналу додатків після збереження їх у C: \ admin \ backups \ a10306.evtx:

wevtutil cl Application /bu:C:\admin\backups\a10306.evtx

Приємна скорочена версія.
Ƭᴇcʜιᴇ007

4
  • wevtutil досить повільний, особливо коли ви очищаєте всі журнали (включаючи порожні)

  • найшвидше рішення, яке я придумав:


ForEach ( $l in ( Get-WinEvent * ).LogName | sort | get-unique ) {[System.Diagnostics.Eventing.Reader.EventLogSession]::GlobalSession.ClearLog("$l")}


Результат: "Видалено 16 подій за 4 журнали: 0,3684785 секунд"

Кожна частина:

  • отримує лише журнали, що містять події (будуть дублікати журнальних імен)

    ForEach ($ l у (Get-WinEvent *). Ім’я користувача | сортувати | отримати унікальний)

  • очистити кожного

    System.Diagnostics.Eventing.Reader.EventLogSession] :: GlobalSession.ClearLog ("$ l")

Повна функція:

function Clear-EventLogs
{
    Begin
    {
        $t1          = ( Measure-Command -Expression{ $active = ( Get-WinEvent ).LogName } ).TotalSeconds
        $totalEvents = $active.Count
        $active      = $active | Sort | Get-Unique
        $totalLogs   = $active.Count
    }
    Process
    {
        $t2 = ( Measure-Command -Expression{
            ForEach ( $l in $active )
            {
                [System.Diagnostics.Eventing.Reader.EventLogSession]::GlobalSession.ClearLog( "$l" )
                # ForEach-Object { Wevtutil.exe cl "$l" }
            }
        } ).TotalSeconds
    }
    End     { $t3 = $t1 + $t2; Write-Output "Cleared $totalEvents events in $totalLogs logs: $t3 seconds" }
}

Якщо ви бачите "Get-WinEvent: Дані недійсні", ви потрапили на незадокументований жорсткий ліміт 256 журналів. Можливо, спочатку потрібно буде фільтрувати журнали. Далі буде вибрано лише журнали, які мають події ( для діагнозу - http://www.powershellish.com/blog/2015/01/19/get-winevent-max-logs/ ):

$logs = Get-WinEvent -ListLog * | Where-Object {$_.RecordCount} | Select-Object -ExpandProperty LogName
ForEach ( $l in ( Get-WinEvent $logs ).LogName | sort | get-unique ) {[System.Diagnostics.Eventing.Reader.EventLogSession]::GlobalSession.ClearLog("$l")}

2
Я повторно перевірив цю функцію. Щоб стерти 168802 події
nixda

1
@nixda: 5 хвилин на 169 000 подій не дуже швидко, але я не впевнений, як wevtutil би виступав з однаковою кількістю подій (може також пропустити деякі з них)
paul bica

3

Важливо використовувати параметр «розділення», якщо у іменах є пробіли:

WEVTUTIL EL > .\LOGLIST.TXT
for /f "delims=" %%a in ( .\LOGLIST.TXT ) do WEVTUTIL CL "%%a"

Ви також можете легко відключити всі журнали подій, не зупиняючи службу журналу подій:

for /f "delims=" %%a in ('WEVTUTIL EL') do WEVTUTIL SL "%%a" /e:false

Звичайно, це відключить лише фактично встановлені програмні події, якщо ви встановите нове програмне забезпечення, воно матиме режим журналу за умовчанням. Але добре, що ви можете залишити Планувальник завдань запущеним, тому просто робіть це щомісяця ;-)


Як я можу відновити другу команду (за допомогою SL та / e: false)? Або як я можу відновити всі властивості журналу подій назад до стандартних?
PeterCo

Шановний PeterCo. Я не впевнений, що ви маєте на увазі за замовчуванням. Перевірте документацію для команди WEVTUTIL, наприклад, спробуйте ввести WEVTUTIL sl /?в командному рядку.
Ксан-Кун Кларк-Девіс

2

До речі, це очищає всі файли журналу, які можуть (залежно від попередніх налаштувань) звільнити досить багато місця

WEVTUTIL EL > .\LOGLIST.TXT
for /f "delims=" %%a in ( .\LOGLIST.TXT ) do WEVTUTIL CL "%%a"
del .\LOGLIST.TXT
timeout 10

1

Я використовував файли .bat, щоб полегшити очищення файлів журналів. Тут просто вибрали простий сценарійhttp://winaero.com/blog/how-to-clear-the-windows-event-log-from-the-command-line/

Скопійовано із цього посилання.

@echo off
FOR /F "tokens=1,2*" %%V IN ('bcdedit') DO SET adminTest=%%V
IF (%adminTest%)==(Access) goto noAdmin
for /F "tokens=*" %%G in ('wevtutil.exe el') DO (call :do_clear "%%G")
echo.
echo Event Logs have been cleared!
goto theEnd
:do_clear
echo clearing %1
wevtutil.exe cl %1
goto :eof
:noAdmin
echo You must run this script as an Administrator!
echo.
:theEnd
  1. Відкрийте Блокнот і скопіюйте цей текст у нього.

  2. Збережіть його як пакетний файл і дайте йому будь-яке ім'я, наприклад: ClEvtLog.bat або ClEvtLog.cmd.

  3. Запустити його з правами адміністратора.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.