Cara menghapus semua kategori log peristiwa Windows dengan cepat

17

Di bawah Windows 7 Anda membuka Event Viewer untuk menelusuri beberapa kategori. Anda juga dapat menghapus satu kategori dengan mengklik Hapus Log ... di panel kanan.

Dengan asumsi saya ingin menghapus SEMUA kategori, apakah saya harus mengklik dan menghapusnya satu per satu?
Ada lusinan dari mereka. Apakah ada cara yang lebih cepat? Mungkin dengan PowerShell?

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

nixda
sumber

Jawaban:

18

Coba WEvtUtil.exe

Tidak ada cara melalui GUI untuk menghapus semua log sekaligus. Setidaknya bukan yang pernah saya temukan. :)

Ulangi dan hapus dengan file perantara

Berikut adalah file batch yang menggunakan WEVTUTIL.exe untuk mendaftar log ke file teks, dan kemudian menggunakan file teks itu untuk menghapus masing-masing log.

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

Jika Anda merasa tidak aman memiliki ini semua dalam satu file batch, maka Anda dapat menyimpan ini ke dua file terpisah dan kemudian menjalankan satu demi satu:
(Batch "Nuke" hanya akan kesalahan jika tidak menemukan "loglist.txt "di direktori saat ini.)

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

Ulangi dan hapus secara langsung

Seperti yang ditunjukkan oleh Logman dalam jawabannya , ini dapat dipersingkat lebih lanjut (dan menghilangkan kebutuhan untuk file teks perantara) dengan menggunakan sesuatu seperti (%'s double untuk file batch):

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

Jalankan sebagai Admin!

Apa pun cara yang Anda pilih, pastikan Anda "Run As Administrator".

Solusi termudah yang saya temukan. Sudah menggunakannya sejak Vista. :)

Ƭᴇcʜιᴇ007
sumber
Saya sedang mempertimbangkan menggunakan WMI dalam skrip python atau yang serupa - contoh yang sangat bagus tentang bagaimana batch dapat menjadi solusi yang lebih mudah dalam skenario tertentu.
Lyle Brown
Output CMD + ikhtisar penampil acara . Menggunakan contoh kedua Anda melalui batch sebagai admin. Beberapa kategori tidak dapat dihapus? Aneh. Dan Powershellategie masih memiliki 11.511 acara? Semua yang lain tampaknya dihapus
nixda
Kacau oleh kurangnya kutipan. maaf soal itu, perbaiki. :)
Ƭᴇcʜιᴇ007
Apakah mungkin untuk menggunakan solusi ini atau yang diusulkan oleh @ Logman di Windows XP? Saya tidak melihatnya ada wevtutildi sistem.
Sopalajo de Arrierez
1
@SopalajodeArrierez "wevtutil" hanya tersedia dari Vista dan di atas ... technet.microsoft.com/en-us/library/cc732848.aspx
tukang tebang kayu
19

Buka cmd prompt atau buat skrip batch dan "jalankan sebagai admin":

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

Kode Powershell untuk menghapus semua log peristiwa:

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

atau pilih dan pilih dalam skrip:

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

dll ...

Anda bisa mendapatkan daftar lengkap semua nama kategori acara dengan mengetik berikut ini di cmd prompt atau PowerShell:

wevtutil el

Informasi lebih lanjut dapat ditemukan di MS TechNet . Contoh:

Mengekspor acara dari Log sistem ke C: \ backup \ system0506.evtx:

wevtutil epl System C:\backup\system0506.evtx

Hapus semua peristiwa dari log Aplikasi setelah menyimpannya ke C: \ admin \ backups a10306.evtx:

wevtutil cl Application /bu:C:\admin\backups\a10306.evtx
Tukang tebang kayu
sumber
Versi singkat yang bagus.
Ƭᴇcʜιᴇ007
4
  • wevtutil sangat lambat, khususnya ketika Anda menghapus semua log (termasuk yang kosong)

  • solusi tercepat yang saya temukan:


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


Resul: "Membersihkan 16 acara dalam 4 log: 0,3684785 detik"

Setiap bagian:

  • hanya mendapat log yang berisi acara (akan ada duplikat LogNames)

    ForEach ($ l dalam (Get-WinEvent *) .LogName | sort | get-unique)

  • bersihkan masing-masing

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

Fungsi penuh:

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" }
}

Jika Anda melihat "Get-WinEvent: Data tidak valid", Anda telah mencapai batas maksimum 256 log yang tidak terdokumentasi. Mungkin perlu menyaring log terlebih dahulu. Berikut ini akan memilih hanya log yang memiliki acara (kredit untuk http://www.powershellish.com/blog/2015/01/19/get-winevent-max-logs/ untuk diagnosis):

$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")}
paul bica
sumber
2
Saya menguji ulang fungsi ini. Butuh 271 detik untuk menghapus 168802 acara
nixda
1
@nixda: 5 menit untuk 169.000 acara tidak terlalu cepat, tapi saya tidak yakin bagaimana kinerja kami dengan jumlah acara yang sama (mungkin juga melewati beberapa di antaranya)
paul bica
3

Penting untuk menggunakan opsi pembatas jika Anda memiliki spasi di namanya:

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

Anda juga dapat dengan mudah menonaktifkan semua pencatatan peristiwa tanpa menghentikan layanan log peristiwa:

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

Tentu saja ini hanya akan menonaktifkan aktivitas perangkat lunak yang benar-benar diinstal, jika Anda menginstal perangkat lunak baru, itu akan mengaktifkan pencatatan secara default. Tapi bagusnya Anda bisa membiarkan Penjadwal Tugas tetap bekerja, jadi lakukan saja setiap bulan ;-)

Xan-Kun Clark-Davis
sumber
Bagaimana saya bisa mengembalikan perintah kedua Anda (dengan SL dan / e: false)? Atau bagaimana cara mengembalikan semua properti log aktivitas saya kembali ke default?
PeterCo
PeterCo yang terhormat. Saya tidak yakin, apa yang Anda maksud secara default. Periksa dokumentasi untuk perintah WEVTUTIL, mis. Coba masukkan WEVTUTIL sl /?di baris perintah.
Xan-Kun Clark-Davis
2

BTW, ini menghapus semua file Log, yang dapat (tergantung pada pengaturan sebelumnya) membebaskan beberapa ruang

WEVTUTIL EL > .\LOGLIST.TXT
for /f "delims=" %%a in ( .\LOGLIST.TXT ) do WEVTUTIL CL "%%a"
del .\LOGLIST.TXT
timeout 10
Xan-Kun Clark-Davis
sumber
1

Saya telah menggunakan file .bat untuk membuatnya sedikit lebih mudah untuk menghapus file log. Cukup pilih skrip sederhana di sinihttp://winaero.com/blog/how-to-clear-the-windows-event-log-from-the-command-line/

Disalin dari tautan itu.

@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. Buka Notepad dan salin-tempel teks itu ke dalamnya.

  2. Simpan sebagai file batch dan berikan nama yang Anda inginkan misalnya: ClEvtLog.bat atau ClEvtLog.cmd.

  3. Jalankan dengan hak admin.

Sakari Niittymaa
sumber