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

17

No Windows 7, você abre o Visualizador de Eventos para procurar 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 clicar e desmarcá-las uma a uma?
Existem dezenas deles. Existe uma maneira mais rápida? Talvez com o PowerShell?

insira a descrição da imagem aqui insira a descrição da imagem aqui

nixda
fonte

Respostas:

18

Tente WEvtUtil.exe

Na GUI, não há como limpar todos os logs de uma só vez. Pelo menos não que eu já tenha encontrado. :)

Fazer loop e excluir com arquivo intermediário

Aqui está um arquivo em lotes que usa WEVTUTIL.exe para listar os logs em um arquivo de texto e, em seguida, use esse arquivo de texto para excluir cada um dos logs.

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 tudo isso em um arquivo em lotes, poderá salvá-lo em dois arquivos separados e depois executar um após o outro:
(O lote "Nuke" apresentará um erro se não encontrar um "loglist.txt "em seu diretório atual.)

Populate-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

Repetir e excluir diretamente

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

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

Executar como administrador!

Qualquer que seja a maneira que você escolher, certifique-se de "Executar como administrador".

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

Ƭᴇcʜιᴇ007
fonte
Eu estava pensando em usar o WMI em um script python ou similar - exemplo muito bom de como o lote pode ser uma solução mais fácil em determinados cenários.
Lyle Brown
Saída CMD + Visão geral do visualizador de eventos . Usou seu segundo exemplo via lote como administrador. Algumas categorias não podem ser apagadas? Estranho. E a categoria Powershell ainda tem 11.511 eventos? Todos os outros parecem estar limpos
nixda
Ferrou com a falta de citações. desculpe por isso, corrigi-lo. :)
Ƭᴇcʜιᴇ007
É possível usar esta solução ou a proposta de @Logman no Windows XP? Não vejo isso wevtutilno sistema.
Sopalajo de Arrierez
1
@SopalajodeArrierez "wevtutil" está disponível apenas no Vista e acima ... technet.microsoft.com/en-us/library/cc732848.aspx
Logman
19

Abra o prompt do 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 logs 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 de cmd ou PowerShell:

wevtutil el

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

Exporte 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 após salvá-los em C: \ admin \ backups \ a10306.evtx:

wevtutil cl Application /bu:C:\admin\backups\a10306.evtx
Logman
fonte
Versão encurtada agradável.
Ƭᴇcʜιᴇ007
4
  • O wevtutil é bastante lento, especialmente quando você limpa todos os logs (incluindo os vazios)

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


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


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

Cada parte:

  • obtém apenas logs contendo eventos (haverá nomes de log 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 vir "Get-WinEvent: os dados são inválidos", você atingiu o limite não documentado de 256 logs. Pode ser necessário filtrar os logs primeiro. A seguir, serão selecionados apenas os logs que possuem eventos (crédito para http://www.powershellish.com/blog/2015/01/19/get-winevent-max-logs/ 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")}
paul bica
fonte
2
Testei novamente essa função. Demorou 271 segundos para limpar 168802 eventos
nixda
1
@nixda: 5 minutos para 169.000 eventos não é muito rápido, mas eu não tenho certeza de como wevtutil que executa com o mesmo número de eventos (que também pode pular alguns deles)
paul bica
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 todo o log de eventos sem interromper o serviço de log de eventos:

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

Obviamente, isso desativará apenas os eventos de software realmente instalados; se você instalar um novo software, ele terá o log ativado por padrão. Mas é bom deixar o Agendador de tarefas em execução; basta fazê-lo todos os meses ;-)

Xan-Kun Clark-Davis
fonte
Como posso reverter seu segundo comando (com SL e / e: false)? Ou como posso restaurar todas as minhas propriedades do log de eventos para o padrão?
PeterCo 31/05
Caro PeterCo. Não tenho certeza, o que você quer dizer por padrão. Verifique a documentação para o comando WEVTUTIL, por exemplo, tente entrar WEVTUTIL sl /?em uma linha de comando.
Xan-Kun Clark-Davis
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
Xan-Kun Clark-Davis
fonte
1

Usei os arquivos .bat para facilitar um pouco a limpeza dos arquivos de log. Apenas peguei o script simples aquihttp://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 lotes e atribua o nome que desejar, por exemplo: ClEvtLog.bat ou ClEvtLog.cmd.

  3. Execute-o com direitos de administrador.

Sakari Niittymaa
fonte