Bagaimana cara menghapus log peristiwa Windows menggunakan baris perintah?

14

Biasanya saya dapat membuka konsol Computer Management, buka snap-in Event Viewer, buka folder Windows Logs, klik kanan pada Application/Security/Setup/Systemsubfolder, pilih Clear Log dan konfirmasi dengan menekan tombol Clearatau Save and Clear.

Memiliki hak yang cukup, bagaimana saya bisa mencapai efek yang sama dengan menggunakan baris perintah, sementara tidak ada permintaan konfirmasi?

Ivan
sumber

Jawaban:

13

Powershell.

PS C:\>Clear-Eventlog -Log Application, System

Defaultnya bukan untuk meminta Anda, tetapi Anda bisa menyediakan -Confirm switch jika Anda ingin diminta.

Edit:

Get-WinEvent -ListLog Application,Setup,Security -Force | % { Wevtutil.exe cl $_.Logname }

Sesuai komentar, yang harus mendapatkan log Operasional dan Administratif.

Ryan Ries
sumber
Terima kasih, powershell -Command "Clear-Eventlog -Log Application, System"berhasil. Tetapi untuk log Pengaturan dikatakan The Log name "Setup" does not exist in the computer "localhost".:-( Ada ide tentang cara menghapus log Pengaturan?
Ivan
Ah, ya, masalahnya adalah bahwa log Pengaturan secara teknis jenis log yang berbeda dari yang lain. Ini adalah log Operasional bukan log Administratif. Anda dapat menghapus log Admin dan Operasi dengan kelas EventLogSession .NET, tetapi cmdlet Powershell tampaknya tidak menggunakan kelas .NET itu. :( Coba perintah ini sebagai gantinya menghapus SEMUA log: Get-WinEvent -ListLog * -Force |% {Wevtutil.exe cl $ _. Logname}
Ryan Ries
Bahkan lebih baik, ganti asterisk dengan daftar log yang ingin Anda hapus. Aplikasi, Pengaturan, Keamanan ... dll.
Ryan Ries
Tampaknya berfungsi tetapi mengatakan "Gagal menghapus log DebugChannel. Operasi yang diminta tidak dapat dilakukan melalui saluran langsung yang diaktifkan. Saluran harus terlebih dahulu dinonaktifkan sebelum melakukan operasi yang diminta."
Ivan
2
Akan selalu ada peristiwa "Log Clear" di log Sistem. Selalu. Bahkan jika Anda menghapus log Sistem terakhir, Anda akan dibiarkan dengan setidaknya satu peristiwa log bersih untuk log sistem itu sendiri. Jangan khawatir tentang kesalahan DebugChannel, karena itu adalah kasus khusus lainnya. Cukup gunakan nama spesifik log peristiwa yang ingin Anda hapus alih-alih tanda bintang. Ini berfungsi baik, tetapi jangan mencoba menghapus DebugChannel jika Anda tidak ingin melihat kesalahan.
Ryan Ries
8

wevtutil enum-logsakan menghitung semua log dalam sistem sementara wevtutil clear-logakan menghapus log. Untuk kasus Anda adalah:

wevtutil clear-log Application
wevtutil clear-log Security
wevtutil clear-log Setup
wevtutil clear-log System

Anda juga dapat membuat cadangan saat membersihkan wevtutil clear-log System /backup:backup.evtx

mprill
sumber
2

Jika Anda ingin menghapus semua log :

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

Diekstrak dari sini .

Sopalajo de Arrierez
sumber
2

PowerShell berikut ini menghapus semua log peristiwa pada mesin lokal, termasuk log operasional / debug / setup secara programatis (tanpa membuat proses "wevtutil"). Untuk menghapus satu log saja, ubah kodenya. Itu tidak sempurna, bagaimanapun, kadang-kadang log Debug dibuat terbuka oleh sesuatu, dan ini tidak menghasilkan kesalahan.

$EventLogs=Get-WinEvent -Force -ListLog *
$EventSession=new-object System.Diagnostics.Eventing.Reader.EventLogSession
foreach ($Log in $EventLogs) {
  if ($Log.IsEnabled) {
    if ($Log.RecordCount -gt 0) { 
      if ($Log.LogType -eq "Debug") {
        $Log.IsEnabled=$false
        $Log.SaveChanges()
        $EventSession.ClearLog($Log.LogName)
        $Log.IsEnabled=$true
        $Log.SaveChanges()
      }
      else { $EventSession.ClearLog($Log.LogName) }
  }
}
Slogmeister Luar Biasa
sumber
0

ini adalah cara menghapus semua log peristiwa melalui PowerShell, pastikan Anda menjalankannya sebagai administrator

wevtutil el | Foreach-Object {wevtutil cl "$_"}

neoghost
sumber
2
Jawaban ini perlu penjelasan.
kasperd