Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows Server

วิธีล้าง Windows Event Logs ด้วย PowerShell หรือ Wevtutil

ในบางกรณี จำเป็นต้องลบรายการทั้งหมดจาก Windows Event Logs บนคอมพิวเตอร์หรือเซิร์ฟเวอร์ แน่นอนว่าคุณสามารถล้าง System Logs ได้จากคอนโซล GUI ของ Event Viewer (Eventvwr.msc) โดยคลิกขวาที่ Log ที่ต้องการล้างแล้วเลือก Clear Log อย่างไรก็ตาม เริ่มจาก Windows Vista เป็นต้นมา Windows ใช้ Logs หลายสิบตัวสำหรับคอมโพเนนต์ระบบต่างๆ การล้างทุกตัวด้วยตนเองใน Event Viewer จะใช้เวลานานมาก การล้าง Logs จาก Command Prompt จะง่ายกว่ามาก โดยใช้ PowerShell หรือเครื่องมือคอนโซลในตัว wevtutil

การล้าง Event Logs ด้วย PowerShell

หากคุณติดตั้ง PowerShell 3 ไว้แล้ว (โดยค่าเริ่มต้นมีใน Windows 8 / Windows Server และรุ่นใหม่กว่า) คุณสามารถใช้ Cmdlet Get-EventLog และ Clear-EventLog เพื่อดูรายการ Event Logs และล้างได้

เปิดคอนโซล PowerShell ด้วยสิทธิ์ Administrator แล้วใช้คำสั่งต่อไปนี้เพื่อแสดงรายการ Event Logs มาตรฐานทั้งหมดในระบบ พร้อมขนาดสูงสุดและจำนวนเหตุการณ์:

Get-EventLog –LogName *

เพื่อล้างรายการทั้งหมดจาก Event Log เฉพาะ (เช่น System Log) ใช้คำสั่ง:

Clear-EventLog –LogName System

ผลลัพธ์คือเหตุการณ์ทั้งหมดของ Log นั้นจะถูกลบ ทำให้เหลือเพียงเหตุการณ์เดียวที่มี EventId 104 และข้อความ "The System log file was cleared"

เพื่อล้าง Event Logs ทั้งหมด คุณต้องส่งชื่อ Log เข้าไปใน Pipeline แต่ไม่สามารถทำได้โดยตรง จึงต้องใช้ลูป ForEach:

Get-EventLog -LogName * | ForEach { Clear-EventLog $_.Log }

ด้วยวิธีนี้ Event Logs มาตรฐานทั้งหมดจะถูกล้าง

การล้าง Logs ด้วยเครื่องมือคอนโซล WevtUtil.exe

Windows มาพร้อมกับยูทิลิตี้ Command Prompt ที่ทรงพลังสำหรับจัดการ Events มานานแล้วคือ WevtUtil.exe ไวยากรณ์ของมันดูซับซ้อนใน מבטแรก ตัวอย่างคำสั่งแสดง Help:

เพื่อแสดงรายการ Logs ที่ลงทะเบียนในระบบ ให้รันคำสั่ง:

WevtUtil enum-logs
หรือรุ่นสั้น:

WevtUtil el

จะแสดงรายการ Logs จำนวนมาก (หมายเหตุ: สามารถนับจำนวน Logs ได้ด้วยคำสั่ง WevtUtil el | Measure-Object ใน Windows 10 มี Logs ทั้งหมด 1,053 ตัว)

ดูข้อมูลรายละเอียดของ Log เฉพาะ:

WevtUtil gl Setup

วิธีล้าง Events ใน Log เฉพาะ:

WevtUtil cl Setup

ก่อนล้าง Events สามารถสำรองไว้ในไฟล์ได้:

WevtUtil cl Setup /bu:SetupLog_Bak.evtx

เพื่อล้าง Logs ทั้งหมดพร้อมกัน สามารถใช้ Cmdlet Get-WinEvent ของ PowerShell เพื่อดึงออบเจกต์ Log ทั้งหมด แล้วใช้ Wevtutil.exe ล้าง:

Get-WinEvent -ListLog * -Force | % { Wevtutil.exe cl $_.LogName }

หรือ

Wevtutil el | ForEach { wevtutil cl "$_" }

หมายเหตุ ในตัวอย่าง ไม่สามารถล้าง Logs 3 ตัวได้เนื่องจากข้อผิดพลาดสิทธิ์เข้าถึง ควรลองล้างผ่าน Event Viewer แทน

สามารถล้าง Logs ผ่าน Command Prompt มาตรฐานได้เช่นกัน:

for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1"