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?

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.


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



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

0

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

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


2
Jawaban ini perlu penjelasan.
kasperd
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.