Làm cách nào để xóa nhật ký sự kiện Windows bằng dòng lệnh?


14

Thông thường tôi có thể mở bảng điều khiển Quản lý máy tính, đi đến phần đính vào Trình xem sự kiện, mở thư mục Nhật ký Windows, nhấp chuột phải vào Application/Security/Setup/Systemthư mục con, chọn Xóa nhật ký và xác nhận bằng cách nhấn nút Clearhoặc Save and Clear.

Có đủ quyền, làm thế nào tôi có thể đạt được hiệu quả tương tự thông qua việc sử dụng dòng lệnh, trong khi không có yêu cầu xác nhận?

Câu trả lời:


13

Quyền hạn.

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

Mặc định không phải là để nhắc bạn, nhưng bạn có thể cung cấp công tắc -Conf Confirm nếu bạn muốn được nhắc.

Biên tập:

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

Theo ý kiến, sẽ nhận được cả nhật ký hoạt động và quản trị.


Cảm ơn bạn, powershell -Command "Clear-Eventlog -Log Application, System"làm việc. Nhưng đối với Nhật ký thiết lập, nó ghi The Log name "Setup" does not exist in the computer "localhost".:-( Có ý tưởng nào về cách xóa Nhật ký thiết lập không?
Ivan

À, đúng rồi, vấn đề là Nhật ký thiết lập về mặt kỹ thuật là một loại nhật ký khác với các nhật ký khác. Đó là nhật ký hoạt động thay vì nhật ký hành chính. Bạn có thể xóa cả nhật ký Quản trị và Hoạt động với lớp EventLogSession .NET, nhưng lệnh ghép ngắn Powershell dường như không sử dụng lớp .NET đó. :( Thay vào đó hãy thử lệnh này để xóa TẤT CẢ nhật ký: Get-WinEvent -ListLog * -Force |% {Wevtutil.exe cl $ _. Logname}
Ryan Ries

Thậm chí tốt hơn, chỉ cần thay thế dấu hoa thị bằng danh sách các bản ghi bạn muốn xóa. Ứng dụng, Thiết lập, Bảo mật ... vv
Ryan Ries

Có vẻ hoạt động nhưng nói "Không thể xóa nhật ký DebugChannel. Thao tác được yêu cầu không thể được thực hiện qua kênh trực tiếp được bật. Trước tiên, kênh phải được tắt trước khi thực hiện thao tác được yêu cầu."
Ivan

2
Sẽ luôn có những sự kiện "Log Clear" trong Nhật ký hệ thống. Luôn luôn. Ngay cả khi bạn xóa nhật ký hệ thống lần cuối, bạn sẽ vẫn còn ít nhất một sự kiện xóa nhật ký cho chính nhật ký hệ thống. Đừng lo lắng về lỗi DebugChannel, vì đó là một trường hợp đặc biệt khác. Chỉ cần sử dụng tên cụ thể của nhật ký sự kiện bạn muốn xóa thay vì dấu hoa thị. Nó hoạt động theo cách nào đó, nhưng đừng cố xóa DebugChannel nếu bạn không muốn thấy lỗi.
Ryan Ries

8

wevtutil enum-logssẽ liệt kê tất cả các bản ghi trong hệ thống trong khi wevtutil clear-logsẽ xóa các bản ghi. Đối với trường hợp của bạn, nó sẽ là:

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

Bạn cũng có thể sao lưu trong khi xóa bằng wevtutil clear-log System /backup:backup.evtx


2

Đối với trường hợp bạn muốn xóa tất cả các bản ghi :

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

Trích từ đây .


2

PowerShell sau đây xóa tất cả các nhật ký sự kiện trên máy cục bộ, bao gồm nhật ký hoạt động / gỡ lỗi / thiết lập theo chương trình (mà không khởi tạo quy trình "wevtutil"). Để xóa chỉ một bản ghi, sửa đổi mã cho phù hợp. Tuy nhiên, nó không hoàn hảo, đôi khi nhật ký gỡ lỗi được giữ bởi một cái gì đó và điều này không tạo ra bất kỳ lỗi nào.

$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

đây là cách xóa tất cả nhật ký sự kiện thông qua powershell, đảm bảo bạn đang chạy nó với tư cách quản trị viên

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


2
Câu trả lời này cần một lời giải thích.
kasperd
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.