Как очистить журналы событий Windows с помощью командной строки?

14

Обычно я могу открыть консоль управления компьютером, перейти к оснастке «Просмотр событий», открыть папку журналов Windows, щелкнуть правой кнопкой мыши Application/Security/Setup/Systemподпапку, выбрать «Очистить журнал» и подтвердить, нажав кнопку Clearили Save and Clear.

Имея достаточно прав, как я могу добиться того же эффекта с помощью командной строки, не вызывая запросов на подтверждение?

Иван
источник

Ответы:

13

Powershell.

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

По умолчанию вас не запрашивают, но вы можете указать ключ -Confirm, если хотите получить запрос.

Редактировать:

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".:-( Есть идеи о том, как очистить журнал установки?
Иван
Ах, да, проблема в том, что журнал установки технически отличается от других. Это операционный журнал вместо административного журнала. Вы можете очистить журналы Admin и Operation с помощью класса EventLogSession .NET, но этот командлет Powershell, очевидно, не использует этот класс .NET. :( Вместо этого попробуйте эту команду, чтобы очистить ВСЕ журналы: Get-WinEvent -ListLog * -Force |% {Wevtutil.exe cl $ _. Logname}
Райан Райс
Более того, просто замените звездочку списком журналов, которые вы хотите очистить. Приложение, настройка, безопасность ... и т. Д.
Райан Райс
Кажется, работает, но говорит: «Не удалось очистить журнал DebugChannel. Запрошенная операция не может быть выполнена по включенному прямому каналу. Канал должен быть сначала отключен перед выполнением запрошенной операции».
Иван
2
В системном журнале всегда будут события «Очистка журнала». Всегда. Даже если вы в последний раз очистите системный журнал, у вас останется хотя бы одно событие очистки журнала для самого системного журнала. Не беспокойтесь об ошибке DebugChannel, так как это еще один особый случай. Просто используйте конкретные имена журналов событий, которые вы хотите очистить, вместо звездочки. Это работает в любом случае, но не пытайтесь очистить DebugChannel, если вы не хотите видеть ошибку.
Райан Райс
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

mprill
источник
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 "$_"}

neoghost
источник
2
Этот ответ требует объяснения.
Касперд