Como limpar todas as categorias do log de eventos do Windows rapidamente

17

No Windows 7, você abre o Visualizador de Eventos para navegar por várias categorias. Você também pode limpar uma única categoria clicando em Limpar Log ... no painel direito.

Supondo que eu queira limpar TODAS as categorias, devo clicá-las e limpá-las uma a uma?
Existem dezenas deles. Existe uma maneira mais rápida? Talvez com o PowerShell?

    
por nixda 06.10.2013 / 20:41

6 respostas

18

Experimente o WEvtUtil.exe

Não há como a interface gráfica limpar todos os registros de uma só vez. Pelo menos não que eu tenha encontrado. :)

Repetir e excluir com arquivo intermediário

Este é um arquivo de lote que usa WEVTUTIL.exe para listar os registros em um arquivo de texto e em seguida, use esse arquivo de texto para excluir cada um dos registros.

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

Se você se sentir inseguro com esse arquivo tudo em um lote, salve-o em dois arquivos separados e execute um após o outro:
(O lote "Nuke" irá apenas errar se não encontrar um "loglist.txt" em seu diretório atual.)

Populate-LogList.cmd

@ECHO OFF
REM Source: https://superuser.com/a/655185/389368
WEvtUtil.exe enum-logs > .\LOGLIST.TXT

Nuke-LogList.cmd

@ECHO OFF
REM Source: https://superuser.com/a/655185/389368
for /f %%a in ( .\LOGLIST.TXT ) do WEvtUtil.exe clear-log "%%a"
del .\LOGLIST.TXT
timeout 30

Realçar e excluir diretamente

Como Logman apontou na sua resposta , isso pode ser ainda mais reduzido (e eliminar a necessidade do texto intermediário arquivo) usando algo como (% 's double for batch file):

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

Executar como administrador!

Seja qual for a maneira que você escolher, assegure-se de "Executar como administrador".

Solução mais fácil que encontrei. Está usando desde o Vista. :)

    
por 06.10.2013 / 20:47
19

Abra o prompt cmd ou crie um script em lote e "execute como administrador":

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

Código do Powershell para limpar todos os registros de eventos:

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

ou escolha e escolha em um script:

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

etc ...

Você pode obter uma lista completa de todos os nomes de categorias de eventos digitando o seguinte em um prompt cmd ou powershell:

wevtutil el

Mais informações podem ser encontradas em MS TechNet . Exemplos:

Exportar eventos do log do sistema para C: \ backup \ system0506.evtx:

wevtutil epl System C:\backup\system0506.evtx

Limpe todos os eventos do log do aplicativo depois de salvá-los em C: \ admin \ backups \ a10306.evtx:

wevtutil cl Application /bu:C:\admin\backups\a10306.evtx
    
por 06.10.2013 / 20:49
4
  • O wevtutil é bastante lento, especialmente quando você limpa todos os logs (incluindo os vazios)

  • solução mais rápida que eu criei:

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

Resul: "Limpou 16 eventos em 4 logs: 0,3684785 segundos"

Cada parte:

  • só recebe logs contendo eventos (haverá LogNames duplicados)

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

  • limpar cada um

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

Função completa:

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

Se você ver "Get-WinEvent: os dados são inválidos", você atingiu o limite máximo não documentado de 256 logs. Pode ser necessário filtrar os logs primeiro. Os elementos a seguir selecionam apenas os registros que têm eventos (crédito para link para o diagnóstico):

$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")}
    
por 19.05.2015 / 07:06
3

É importante usar a opção delim se você tiver espaços nos nomes:

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

Você também pode desativar facilmente todos os registros de eventos sem interromper o serviço de log de eventos:

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

É claro que isso desativará apenas os eventos de software instalados, se você instalar um novo software, ele terá o registro ativado por padrão. Mas ainda bem que você pode deixar o Agendador de Tarefas em execução, então faça isso todo mês; -)

    
por 27.04.2015 / 01:14
2

BTW, isso limpa todos os arquivos de log, que podem (dependendo das configurações anteriores) liberar bastante espaço

WEVTUTIL EL > .\LOGLIST.TXT
for /f "delims=" %%a in ( .\LOGLIST.TXT ) do WEVTUTIL CL "%%a"
del .\LOGLIST.TXT
timeout 10
    
por 08.10.2015 / 15:55
1

Eu usei arquivos .bat para facilitar um pouco a limpeza de arquivos de log. Apenas peguei o script simples aqui http://winaero.com/blog/how-to-clear-the-windows-event-log-from-the-command-line/

copiado desse link.

@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. Abra o Bloco de notas e copie e cole o texto nele.

  2. Salve-o como um arquivo em lote e dê a ele qualquer nome desejado, por exemplo: ClEvtLog.bat ou ClEvtLog.cmd.

  3. Execute com direitos de administrador.

por 07.11.2015 / 10:05