วิธีล้างหมวดหมู่บันทึกเหตุการณ์ของ Windows ทั้งหมดอย่างรวดเร็ว


17

ใน Windows 7 คุณเปิด Event Viewer เพื่อเรียกดูหลายหมวดหมู่ คุณสามารถล้างหมวดหมู่เดียวได้ด้วยการคลิกล้างบันทึก ...ในบานหน้าต่างด้านขวา

สมมติว่าฉันต้องการล้างหมวดหมู่ทั้งหมดฉันควรคลิกและล้างมันทีละรายการหรือไม่
มีหลายสิบคน มีวิธีที่เร็วกว่านี้ไหม อาจจะด้วย PowerShell

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่

คำตอบ:


18

ลอง WEvtUtil.exe

ไม่มีวิธีผ่านทาง GUI เพื่อล้างบันทึกทั้งหมดในครั้งเดียว อย่างน้อยก็ไม่ใช่ที่ฉันเคยพบ :)

วนซ้ำและลบด้วยไฟล์ระดับกลาง

ต่อไปนี้เป็นไฟล์แบตช์ที่ใช้WEVTUTIL.exeเพื่อแสดงรายการบันทึกลงในไฟล์ข้อความจากนั้นใช้ไฟล์ข้อความนั้นเพื่อลบบันทึกแต่ละรายการ

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

หากคุณรู้สึกไม่ปลอดภัยที่มีสิ่งนี้ทั้งหมดในไฟล์แบตช์เดียวคุณสามารถบันทึกไฟล์นี้เป็นไฟล์แยกกันสองไฟล์จากนั้นรันหนึ่งไฟล์ต่อไปนี้:
(แบตช์ "Nuke" จะผิดพลาดหากไม่พบ "loglist.txt" "ในไดเรกทอรีปัจจุบัน)

เติม-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

วนซ้ำและลบโดยตรง

ดังที่ Logman ชี้ให้เห็นในคำตอบของเขาสิ่งนี้สามารถย่อให้สั้นลง (และลดความต้องการไฟล์ข้อความระดับกลาง) โดยใช้บางสิ่งเช่น (% 's สองเท่าสำหรับไฟล์แบตช์):

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

ทำงานเป็นผู้ดูแลระบบ!

วิธีใดก็ตามที่คุณเลือกให้แน่ใจว่าคุณ "Run As Administrator"

ทางออกที่ง่ายที่สุดที่ฉันพบ เคยใช้มาตั้งแต่ Vista :)


ฉันกำลังพิจารณาใช้ WMI ในสคริปต์ไพ ธ อนหรือคล้ายกัน - ตัวอย่างที่ดีมากของวิธีการที่แบทช์สามารถเป็นวิธีแก้ปัญหาที่ง่ายขึ้นในบางสถานการณ์
Lyle Brown

เอาท์พุท CMD + ภาพรวมดูเหตุการณ์ ใช้ตัวอย่างที่สองของคุณผ่านแบทช์ในฐานะผู้ดูแลระบบ ไม่สามารถล้างบางหมวดหมู่ แปลก. และ Powershell ประเภทยังคงมีเหตุการณ์ 11.511? ดูเหมือนว่าคนอื่น ๆ ทั้งหมดจะถูกล้าง
nixda

เมาโดยไม่มีคำพูด ขอโทษด้วยเกี่ยวกับมัน :)
Ƭᴇcʜιᴇ007

เป็นไปได้หรือไม่ที่จะใช้โซลูชันนี้หรือที่ @Logman เสนอใน Windows XP? ฉันไม่เห็นมันมีwevtutilอยู่ในระบบ
Sopalajo de Arrierez

1
@SopalajodeArrierez "wevtutil" พร้อมใช้งานจาก Vista ขึ้นไปเท่านั้น ... technet.microsoft.com/en-us/library/cc732848.aspx
Logman

19

เปิด cmd prompt หรือสร้าง batch script และ "run as admin":

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

รหัส Powershell สำหรับการล้างบันทึกเหตุการณ์ทั้งหมด:

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

หรือเลือกและเลือกในสคริปต์:

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

ฯลฯ ...

คุณสามารถรับรายชื่อทั้งหมดของหมวดหมู่เหตุการณ์ทั้งหมดได้โดยพิมพ์คำสั่งต่อไปนี้ใน cmd prompt หรือ powershell:

wevtutil el

ข้อมูลเพิ่มเติมสามารถพบได้ที่MS TechNet ตัวอย่าง:

ส่งออกกิจกรรมจากบันทึกของระบบเป็น C: \ backup \ system0506.evtx:

wevtutil epl System C:\backup\system0506.evtx

ล้างกิจกรรมทั้งหมดจากบันทึกของแอปพลิเคชันหลังจากบันทึกลงใน C: \ admin \ backups \ a10306.evtx:

wevtutil cl Application /bu:C:\admin\backups\a10306.evtx

รุ่นย่อที่ดี
Ƭᴇcʜιᴇ007

4
  • wevtutil ค่อนข้างช้าโดยเฉพาะเมื่อคุณล้างบันทึกทั้งหมด (รวมถึงบันทึกว่าง)

  • ทางออกที่เร็วที่สุดฉันมาด้วย:


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


Resul: "ล้าง 16 เหตุการณ์ใน 4 บันทึก: 0.3684785 วินาที"

แต่ละส่วน:

  • รับเฉพาะบันทึกที่มีกิจกรรม (จะมีชื่อซ้ำกัน)

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

  • ล้างแต่ละคน

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

ฟังก์ชั่นเต็มรูปแบบ:

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

หากคุณเห็น "Get-WinEvent: ข้อมูลไม่ถูกต้อง" แสดงว่าคุณเข้าสู่บันทึกข้อ จำกัด จำนวน 256 ไฟล์ อาจจำเป็นต้องกรองบันทึกก่อน ต่อไปนี้จะเลือกเฉพาะบันทึกที่มีเหตุการณ์ (เครดิตไปที่http://www.powershellish.com/blog/2015/01/19/get-winevent-max-logs/สำหรับการวินิจฉัย):

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

2
ฉันลองฟังก์ชั่นนี้อีกครั้ง ใช้เวลา 271 วินาทีในการลบกิจกรรม 168802 ครั้ง
nixda

1
@ นิกดา: 5 นาทีสำหรับเหตุการณ์ 169,000 เหตุการณ์นั้นไม่เร็วมาก แต่ฉันไม่แน่ใจว่า wevtutil จะทำงานกับจำนวนเหตุการณ์เท่ากันได้อย่างไร (อาจข้ามบางเหตุการณ์ด้วย)
paul bica

3

มันเป็นสิ่งสำคัญที่จะใช้ตัวเลือก delim ถ้าคุณมีช่องว่างในชื่อ:

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

คุณยังสามารถปิดใช้งานการบันทึกเหตุการณ์ทั้งหมดได้อย่างง่ายดายโดยไม่ต้องหยุดบริการบันทึกเหตุการณ์:

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

แน่นอนว่าสิ่งนี้จะปิดใช้งานกิจกรรมซอฟต์แวร์ที่ติดตั้งจริงเท่านั้นหากคุณติดตั้งซอฟต์แวร์ใหม่จะมีการเปิดใช้งานการบันทึกตามค่าเริ่มต้น แต่สิ่งที่ดีที่คุณสามารถปล่อยให้ Task Scheduler ทำงานดังนั้นเพียงแค่ทำมันทุกเดือน ;-)


ฉันจะเปลี่ยนคำสั่งที่สองของคุณ (ด้วย SL และ / e: false) ได้อย่างไร หรือฉันจะคืนค่าคุณสมบัติบันทึกเหตุการณ์ทั้งหมดของฉันกลับเป็นค่าเริ่มต้นได้อย่างไร
PeterCo

เรียน PeterCo ฉันไม่แน่ใจสิ่งที่คุณหมายถึงโดยค่าเริ่มต้น ตรวจสอบเอกสารประกอบสำหรับคำสั่ง WEVTUTIL เช่นลองป้อน WEVTUTIL sl /?ที่บรรทัดคำสั่ง
Xan-Kun Clark-Davis

2

BTW นี่จะเป็นการล้างไฟล์บันทึกทั้งหมดซึ่งสามารถ (ขึ้นอยู่กับการตั้งค่าก่อนหน้า) ซึ่งทำให้มีพื้นที่ว่างค่อนข้างมาก

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

1

ฉันใช้ไฟล์. bat เพื่อทำให้ง่ายขึ้นเล็กน้อยในการล้างไฟล์บันทึก เพิ่งเลือกสคริปต์ง่าย ๆ ที่นี่http://winaero.com/blog/how-to-clear-the-windows-event-log-from-the-command-line/

คัดลอกจากลิงก์นั้น

@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. เปิด Notepad และคัดลอกวางข้อความนั้นลงไป

  2. บันทึกเป็นแบตช์ไฟล์และตั้งชื่อที่คุณต้องการเช่น: ClEvtLog.bat หรือ ClEvtLog.cmd

  3. เรียกใช้ด้วยสิทธิ์ของผู้ดูแลระบบ

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