จะล้างบันทึกเหตุการณ์ Windows โดยใช้บรรทัดคำสั่งได้อย่างไร


14

ปกติฉันสามารถเปิดคอนโซลการจัดการคอมพิวเตอร์ไปที่ตัวแสดงเหตุการณ์ snap-in เปิดโฟลเดอร์แฟ้มบันทึกของ Windows คลิกขวาที่Application/Security/Setup/Systemโฟลเดอร์ย่อยเลือกล้างเข้าสู่ระบบและยืนยันโดยการกดClearหรือSave and Clearปุ่ม

มีสิทธิ์เพียงพอฉันจะได้รับผลกระทบเดียวกันผ่านการใช้บรรทัดคำสั่งในขณะที่ไม่มีการร้องขอการยืนยันได้อย่างไร

คำตอบ:


13

Powershell

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

ค่าเริ่มต้นคือไม่ให้คุณ แต่คุณสามารถจัดหา - ยืนยันสวิตช์หากคุณต้องการได้รับการพร้อมท์

แก้ไข:

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

ตามความคิดเห็นที่ควรได้รับทั้งบันทึกการดำเนินงานและการบริหาร


ขอบคุณpowershell -Command "Clear-Eventlog -Log Application, System"ผลงาน แต่สำหรับการบันทึกการตั้งค่าที่มันพูดว่าThe Log name "Setup" does not exist in the computer "localhost".:-( ความคิดใด ๆ เกี่ยวกับวิธีการยกเลิกการบันทึกการตั้งค่า?
อีวาน

ใช่ปัญหาคือบันทึกการตั้งค่าเป็นเทคนิคที่แตกต่างจากบันทึกอื่น ๆ มันเป็นบันทึกการดำเนินงานแทนบันทึกการบริหาร คุณสามารถล้างทั้งบันทึกผู้ดูแลระบบและการปฏิบัติงานด้วยคลาส EventLogSession .NET แต่ดูเหมือนว่า Powershell cmdlet จะไม่ใช้คลาส NET. :( ลองใช้คำสั่งนี้เพื่อล้างบันทึกทั้งหมด : Get-WinEvent -ListLog * -Force |% {Wevtutil.exe cl $ _. logname}
Ryan Ries

ยิ่งไปกว่านั้นเพียงแทนที่เครื่องหมายดอกจันด้วยรายการบันทึกที่คุณต้องการลบ แอปพลิเคชันการตั้งค่าความปลอดภัย ... ฯลฯ
Ryan Ries

ดูเหมือนว่าจะทำงาน แต่บอกว่า "ไม่สามารถล้างบันทึก DebugChannel การดำเนินการที่ร้องขอไม่สามารถดำเนินการผ่านช่องทางโดยตรงที่เปิดใช้งานได้ช่องจะต้องปิดใช้งานก่อนที่จะดำเนินการตามที่ขอ"
อีวาน

2
จะมีเหตุการณ์ "บันทึกชัดเจน" ในบันทึกของระบบเสมอ เสมอ. แม้ว่าคุณจะล้างบันทึกของระบบเป็นครั้งสุดท้ายคุณจะถูกทิ้งให้มีเหตุการณ์ล้างบันทึกอย่างน้อยหนึ่งเหตุการณ์สำหรับบันทึกของระบบ ไม่ต้องกังวลเกี่ยวกับข้อผิดพลาด DebugChannel เนื่องจากเป็นกรณีพิเศษอีกกรณีหนึ่ง เพียงใช้ชื่อเฉพาะของบันทึกเหตุการณ์ที่คุณต้องการล้างแทนเครื่องหมายดอกจัน ใช้งานได้ทั้งสองวิธี แต่อย่าพยายามล้างข้อมูล DebugChannel หากคุณไม่ต้องการเห็นข้อผิดพลาด
Ryan Ries

8

wevtutil enum-logsจะระบุบันทึกทั้งหมดในระบบในขณะที่wevtutil clear-logจะล้างบันทึก สำหรับกรณีของคุณมันจะเป็น:

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

คุณสามารถสำรองข้อมูลในขณะที่ล้างข้อมูลด้วย wevtutil clear-log System /backup:backup.evtx


2

สำหรับกรณีที่คุณต้องการล้างบันทึกทั้งหมด :

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

สกัดจากที่นี่


2

PowerShell ต่อไปนี้จะทำการล้างบันทึกเหตุการณ์ทั้งหมดบนเครื่องโลคัลรวมถึงบันทึกการทำงาน / การดีบัก / การตั้งค่าโดยทางโปรแกรม (โดยไม่ต้องเริ่มกระบวนการ "wevtutil") เมื่อต้องการล้างเพียงบันทึกเดียวแก้ไขรหัสตาม มันไม่สมบูรณ์แบบอย่างไรก็ตามบางครั้งบันทึกการดีบักจะถูกเปิดโดยบางสิ่งบางอย่างและนี่จะไม่สร้างข้อผิดพลาดใด ๆ

$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

นี่คือวิธีการล้างบันทึกเหตุการณ์ทั้งหมดผ่าน PowerShell ตรวจสอบให้แน่ใจว่าคุณใช้งานในฐานะผู้ดูแลระบบ

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


2
คำตอบนี้ต้องการคำอธิบาย
kasperd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.