Como limpar os logs de eventos do Windows usando a linha de comando?

14

Normalmente, posso abrir o console de Gerenciamento do Computador, acessar o snap-in Visualizador de Eventos, abrir a pasta Logs do Windows, clicar com o botão direito do mouse na Application/Security/Setup/Systemsubpasta, escolher Limpar Log e confirmar pressionando o botão Clearou Save and Clear.

Tendo direitos suficientes, como posso obter o mesmo efeito usando a linha de comando e sem solicitar solicitações de confirmação?

Ivan
fonte

Respostas:

13

Powershell.

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

O padrão é não solicitar, mas você pode fornecer a opção -Confirm se desejar ser solicitado.

Editar:

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

Conforme os comentários, isso deve obter os logs Operacionais e Administrativos.

Ryan Ries
fonte
Obrigado, powershell -Command "Clear-Eventlog -Log Application, System"trabalha. Mas para o registo de configuração diz The Log name "Setup" does not exist in the computer "localhost".:-( Algumas ideias sobre como limpar o registo de configuração?
Ivan
Ah, sim, o problema é que o log de instalação é tecnicamente um tipo diferente de log que os outros. É um log operacional em vez de um log administrativo. Você pode limpar os logs Admin e Operation com a classe .NET EventLogSession .NET, mas esse cmdlet do Powershell aparentemente não usa essa classe .NET. :( Tente este comando em vez de limpar TODAS logs: Get-WinEvent -ListLog * -Force |% {. Wevtutil.exe cl $ _ logname}
Ryan Ries
Melhor ainda, substitua o asterisco pela lista de logs que você deseja limpar. Aplicação, Instalação, Segurança ... etc.
Ryan Ries
Parece funcionar, mas diz "Falha ao limpar o log DebugChannel. A operação solicitada não pode ser executada em um canal direto ativado. O canal deve primeiro ser desativado antes de executar a operação solicitada".
27412 Ivan
2
Sempre haverá esses eventos "Log Clear" no log do sistema. Sempre. Mesmo se você limpar o log do sistema por último, você terá pelo menos um evento de limpeza do log para o próprio log do sistema. Não se preocupe com o erro DebugChannel, pois esse é outro caso especial. Basta usar os nomes específicos dos logs de eventos que você deseja limpar, em vez do asterisco. Funciona de qualquer maneira, mas não tente limpar o DebugChannel se não desejar ver um erro.
Ryan Ries
8

wevtutil enum-logsenumerará todos os logs no sistema enquanto wevtutil clear-loglimpará os logs. Para o seu caso, seria:

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

Você também pode fazer backup enquanto limpa com wevtutil clear-log System /backup:backup.evtx

mprill
fonte
2

Para o caso em que você deseja limpar todos os logs :

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

Extraído daqui .

Sopalajo de Arrierez
fonte
2

O PowerShell a seguir limpa todos os logs de eventos na máquina local, incluindo os logs operacionais / depuração / instalação programaticamente (sem instanciar o processo "wevtutil"). Para limpar apenas um log, modifique o código adequadamente. No entanto, não é perfeito, às vezes os logs de depuração são mantidos abertos por algo, e isso não gera erros.

$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) }
  }
}
Slogmeister Extraordinaire
fonte
0

é assim que é possível limpar todo o log de eventos através do PowerShell, verifique se você o está executando como administrador

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

neoghost
fonte
2
Esta resposta precisa de uma explicação.
Kasperd # 26/15