Tüm Windows olay günlüğü kategorilerini hızlı bir şekilde temizleme


17

Windows 7 altında, birkaç kategoriye göz atmak için Olay Görüntüleyicisi'ni açarsınız. Sağ bölmedeki Günlüğü Temizle ... 'yi tıklayarak tek bir kategoriyi de temizleyebilirsiniz .

TÜM kategorileri temizlemek istediğimi varsayarsak, bunları tek tek tıklayıp temizlemem gerekir mi?
Onlarca kişi var. Daha hızlı bir yol var mı? Belki PowerShell ile?

resim açıklamasını buraya girin resim açıklamasını buraya girin

Yanıtlar:


18

WEvtUtil.exe dosyasını deneyin

GUI aracılığıyla tüm günlükleri aynı anda silmenin bir yolu yoktur. En azından şimdiye kadar bulduğumdan değil. :)

Ara dosya ile döngü ve silme

Günlükleri bir metin dosyasına listelemek için WEVTUTIL.exe dosyasını kullanan bir toplu iş dosyası ve günlüklerin her birini silmek için bu metin dosyasını kullanın.

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

Tüm bunların bir toplu iş dosyasında güvenli olmadığını düşünüyorsanız, bunu iki ayrı dosyaya kaydedip birbiri ardına çalıştırabilirsiniz:
("Nuke" toplu işi "loglist.txt dosyasını bulamazsa hata verir. "geçerli dizinde.)

Doldur-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

Doğrudan döngü ve silme

Logman'ın cevabında belirttiği gibi , bu (toplu iş dosyası için% 'nin iki katı) gibi bir şey kullanarak daha da kısaltılabilir (ve ara metin dosyasına olan ihtiyacı ortadan kaldırabilir):

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

Yönetici olarak çalıştır!

Hangi yolu seçerseniz seçin, "Yönetici Olarak Çalıştır" seçeneğini kullanın.

Bulduğum en kolay çözüm. Vista'dan beri kullanıyorum. :)


WMI bir python komut dosyası veya benzeri kullanarak kullanmayı düşünüyordum - toplu belirli senaryolarda daha kolay bir çözüm olabilir nasıl çok iyi bir örnek.
Lyle Brown

CMD çıkışı + Olay görüntüleyiciye genel bakış . İkinci örneğinizi toplu iş aracılığıyla yönetici olarak kullandınız. Bazı kategoriler temizlenemiyor mu? Garip. Ve Powershell kategorisinde hala 11.511 olay var mı? Diğerleri temizlenmiş gibi görünüyor
nixda

Tırnak eksikliği ile berbat. bunun için üzgünüm, düzelttim. :)
Ƭᴇcʜιᴇ007

Bu çözümü veya @Logman tarafından önerileni Windows XP'de kullanmak mümkün müdür? wevtutilSistemde olduğunu görmüyorum .
Sopalajo de Arrierez

1
@SopalajodeArrierez "wevtutil" yalnızca Vista ve üzeri sürümlerde mevcuttur ... technet.microsoft.com/en-us/library/cc732848.aspx
Logman

19

Cmd istemini açın veya toplu komut dosyası oluşturun ve "yönetici olarak çalıştır":

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

Tüm olay günlüklerini temizlemek için Powershell kodu:

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

veya bir komut dosyasında seçip seçin:

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

vb...

Bir cmd bilgi istemine veya powershell'e aşağıdakileri yazarak tüm olay kategorisi adlarının tam bir listesini alabilirsiniz:

wevtutil el

Daha fazla bilgi MS TechNet'te bulunabilir . Örnekler:

Olayları Sistem günlüğünden C: \ backup \ system0506.evtx dosyasına dışa aktarın:

wevtutil epl System C:\backup\system0506.evtx

C: \ admin \ backups \ a10306.evtx klasörüne kaydettikten sonra tüm olayları Uygulama günlüğünden silin:

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

Güzel kısaltılmış versiyonu.
Octcʜιᴇ007

4
  • wevtutil, özellikle tüm günlükleri temizlediğinizde (boş olanlar dahil) oldukça yavaştır

  • bulduğum en hızlı çözüm:


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


Sonuç: "4 günlükte 16 olay temizlendi: 0.3684785 saniye"

Her parça:

  • yalnızca olay içeren günlükleri alır (yinelenen Günlük Adları olacaktır)

    ForEach ($ l içinde (Get-WinEvent *) .LogName | sort | get-unique)

  • her birini temizle

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

Tam işlevi:

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: Veriler geçersiz" ifadesini görürseniz, belgelenmemiş 256 günlük sabit sınırına eriştiniz. İlk olarak günlükleri filtrelemek gerekebilir. Aşağıdakiler yalnızca olayları içeren günlükleri seçecektir ( teşhis için http://www.powershellish.com/blog/2015/01/19/get-winevent-max-logs/ a ):

$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
Bu işlevi tekrar test ettim. 168802 etkinliği silmek 271 saniye sürdü
nixda

1
@nixda: 169.000 etkinlik için 5 dakika çok hızlı değil, ancak wevtutil'in aynı sayıda etkinlikle nasıl performans göstereceğinden emin değilim (bazılarını da atlayabilir)
paul bica

3

Adlarda boşluk varsa delim seçeneğini kullanmak önemlidir:

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

Ayrıca olay günlüğü hizmetini durdurmadan tüm olay günlüğünü kolayca devre dışı bırakabilirsiniz:

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

Tabii ki bu yalnızca gerçekte kurulu yazılım olaylarını devre dışı bırakır, yeni bir yazılım yüklerseniz, günlük kaydı varsayılan olarak etkinleştirilir. Ama iyi bir şey Görev Zamanlayıcı çalışır durumda bırakabilirsiniz, bu yüzden sadece her ay yapın ;-)


İkinci komutunuzu nasıl geri döndürebilirim (SL ve / e: false ile)? Veya tüm olay günlüğü özelliklerimi varsayılana nasıl geri yükleyebilirim?
PeterCo

Sevgili PeterCo. Emin değilim, varsayılan olarak ne demek istiyorsun. WEVTUTIL komutunun belgelerine bakın, örneğin WEVTUTIL sl /?bir komut satırına girmeyi deneyin .
Xan-Kun Clark-Davis

2

BTW, tüm Günlük dosyalarını temizler (önceki ayarlara bağlı olarak) oldukça fazla alan açabilir

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

1

Günlük dosyalarını temizlemeyi biraz daha kolaylaştırmak için .bat dosyalarını kullandım. Basit komut dosyasını burada seçtimhttp://winaero.com/blog/how-to-clear-the-windows-event-log-from-the-command-line/

Bu bağlantıdan kopyalandı.

@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. Not Defteri'ni açın ve metni kopyalayın.

  2. Bir toplu iş dosyası olarak kaydedin ve istediğiniz herhangi bir adı verin: ClEvtLog.bat veya ClEvtLog.cmd.

  3. Yönetici haklarıyla çalıştırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.