Làm thế nào để xóa tất cả các loại nhật ký sự kiện Windows nhanh


17

Trong Windows 7, bạn mở Trình xem sự kiện để duyệt một số danh mục. Bạn cũng có thể xóa một danh mục bằng cách nhấp vào Xóa Nhật ký ... trên khung bên phải.

Giả sử tôi muốn xóa TẤT CẢ các danh mục, tôi có nên nhấp và xóa từng danh mục không?
Có hàng tá trong số họ. Có cách nào nhanh hơn? Có lẽ với PowerShell?

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Câu trả lời:


18

Hãy dùng thử WEvtUtil.exe

Không có cách nào thông qua GUI để xóa tất cả các bản ghi cùng một lúc. Ít nhất là không phải là tôi đã tìm thấy. :)

Lặp lại và xóa với tập tin trung gian

Đây là một tệp bó sử dụng WEVTUTIL.exe để liệt kê các bản ghi vào một tệp văn bản, sau đó sử dụng tệp văn bản đó để xóa từng bản ghi.

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

Nếu bạn cảm thấy không an toàn khi có tất cả trong một tệp bó, thì bạn có thể lưu tệp này thành hai tệp riêng biệt và sau đó chạy từng tệp khác:
(Lô "Nuke" sẽ chỉ báo lỗi nếu không tìm thấy "loglist.txt "trong thư mục hiện tại của nó.)

Dân số-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

Lặp lại và xóa trực tiếp

Như Logman đã chỉ ra trong câu trả lời của mình , điều này có thể được rút ngắn hơn nữa (và loại bỏ sự cần thiết của tệp văn bản trung gian) bằng cách sử dụng một cái gì đó như (% gấp đôi cho tệp bó):

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

Chạy với tư cách Quản trị viên!

Dù bạn chọn cách nào, hãy đảm bảo bạn "Chạy với tư cách quản trị viên".

Giải pháp dễ nhất tôi đã tìm thấy. Đã sử dụng nó kể từ Vista. :)


Tôi đã xem xét sử dụng WMI trong một kịch bản python hoặc tương tự - ví dụ rất hay về cách lô có thể là một giải pháp dễ dàng hơn trong các tình huống nhất định.
Lyle Brown

Đầu ra CMD + Tổng quan về trình xem sự kiện . Đã sử dụng ví dụ thứ hai của bạn thông qua đợt làm quản trị viên. Một số loại không thể được xóa? Lạ thật. Và Powershell phân loại vẫn có 11,511 sự kiện? Tất cả những thứ khác dường như bị xóa
nixda

Vặn vẹo bởi thiếu dấu ngoặc kép. xin lỗi về điều đó, đã sửa nó :)
cʜιᴇ007

Có thể sử dụng giải pháp này hoặc đề xuất của @Logman trong Windows XP không? Tôi không thấy nó có wevtutiltrong hệ thống.
Sopalajo de Arrierez

1
@SopalajodeArrierez "wevtutil" chỉ có sẵn từ Vista trở lên ... technet.microsoft.com/en-us/l
Library / cc732848.aspx

19

Mở dấu nhắc cmd hoặc tạo tập lệnh bó và "chạy với tư cách quản trị viên":

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

Mã Powershell để xóa tất cả các bản ghi sự kiện:

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

hoặc chọn và chọn trong một kịch bản:

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

Vân vân...

Bạn có thể nhận được một danh sách đầy đủ của tất cả các tên danh mục sự kiện bằng cách nhập vào phần sau trong dấu nhắc cmd hoặc powershell:

wevtutil el

Thông tin chi tiết có thể được tìm thấy tại MS TechNet . Ví dụ:

Xuất các sự kiện từ Nhật ký hệ thống sang C: \ backup \ system0506.evtx:

wevtutil epl System C:\backup\system0506.evtx

Xóa tất cả các sự kiện khỏi Nhật ký ứng dụng sau khi lưu chúng vào C: \ admin \ backups \ a10306.evtx:

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

Phiên bản rút gọn đẹp.
Ƭᴇcʜιᴇ007

4
  • wevtutil khá chậm, đặc biệt khi bạn xóa tất cả các bản ghi (bao gồm cả các bản ghi trống)

  • giải pháp nhanh nhất tôi đã đưa ra:


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


Resul: "Đã xóa 16 sự kiện trong 4 nhật ký: 0.3684785 giây"

Mỗi phần:

  • chỉ nhận được các bản ghi chứa các sự kiện (sẽ có các LogNames trùng lặp)

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

  • xóa từng cái

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

Chức năng đầy đủ:

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

Nếu bạn thấy "Get-WinEvent: Dữ liệu không hợp lệ", bạn đã đạt giới hạn cứng không có giấy tờ là 256 bản ghi. Có thể cần phải lọc các bản ghi đầu tiên. Sau đây sẽ chỉ chọn các nhật ký có sự kiện (ghi có vào http://www.powershellish.com/blog/2015/01/19/get-winevent-max-logs/ để chẩn đoán):

$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
Tôi đã kiểm tra lại chức năng này. Phải mất 271 giây để xóa 168802 sự kiện
nixda

1
@nixda: 5 phút cho 169.000 sự kiện không phải là rất nhanh, nhưng tôi không chắc wevtutil sẽ hoạt động như thế nào với cùng số lượng sự kiện (nó cũng có thể bỏ qua một số trong số chúng)
paul bica

3

Điều quan trọng là sử dụng tùy chọn delim nếu bạn có khoảng trắng trong tên:

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

Bạn cũng có thể dễ dàng vô hiệu hóa tất cả ghi nhật ký sự kiện mà không cần dừng dịch vụ nhật ký sự kiện:

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

Tất nhiên điều này sẽ chỉ vô hiệu hóa các sự kiện phần mềm được cài đặt thực sự, nếu bạn cài đặt một phần mềm mới, nó sẽ có tính năng ghi nhật ký được bật theo mặc định. Nhưng điều tốt là bạn có thể để Trình lập lịch tác vụ chạy, vì vậy chỉ cần thực hiện hàng tháng ;-)


Làm cách nào tôi có thể hoàn nguyên lệnh thứ hai của bạn (với SL và / e: false)? Hoặc làm thế nào tôi có thể khôi phục tất cả các thuộc tính nhật ký sự kiện của tôi trở lại mặc định?
PeterCo

PeterCo thân mến. Tôi không chắc chắn, những gì bạn có nghĩa là mặc định. Kiểm tra tài liệu cho lệnh WEVTUTIL, ví dụ: thử nhập WEVTUTIL sl /?tại một dòng lệnh.
Xan-Kun Clark-Davis

2

BTW, điều này sẽ xóa tất cả các tệp Nhật ký, có thể (tùy thuộc vào cài đặt trước đó) giải phóng khá nhiều dung lượng

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

1

Tôi đã sử dụng các tệp .bat để xóa các tệp nhật ký dễ dàng hơn một chút. Chỉ cần chọn kịch bản đơn giản ở đâyhttp://winaero.com/blog/how-to-clear-the-windows-event-log-from-the-command-line/

Sao chép từ liên kết đó.

@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. Mở Notepad và sao chép-dán văn bản đó vào đó.

  2. Lưu nó dưới dạng tệp bó và đặt cho nó bất kỳ tên nào bạn muốn, ví dụ: ClEvtLog.bat hoặc ClEvtLog.cmd.

  3. Chạy nó với quyền quản trị.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.