Come cancellare velocemente tutte le categorie del registro eventi di Windows


17

In Windows 7 apri il Visualizzatore eventi per sfogliare diverse categorie. Puoi anche cancellare una singola categoria facendo clic su Cancella registro ... nel riquadro di destra.

Supponendo che desidero cancellare TUTTE le categorie, dovrei fare clic per cancellarle una per una?
Ce ne sono dozzine. C'è un modo più veloce? Forse con PowerShell?

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

Risposte:


18

Prova WEvtUtil.exe

Tramite la GUI non è possibile cancellare tutti i registri contemporaneamente. Almeno non quello che abbia mai trovato. :)

Ripeti ed elimina con il file intermedio

Ecco un file batch che utilizza WEVTUTIL.exe per elencare i log in un file di testo, quindi utilizzare quel file di testo per eliminare ciascuno dei log.

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

Se non ti senti sicuro di avere tutto questo in un file batch, puoi salvarlo in due file separati ed eseguirlo uno dopo l'altro:
(Il batch "Nuke" sbaglierà se non trova un "loglist.txt "nella sua directory corrente.)

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

Ripeti ed elimina direttamente

Come Logman ha sottolineato nella sua risposta , questo può essere ulteriormente abbreviato (ed eliminare la necessità del file di testo intermedio) usando qualcosa come (il doppio di% per il file batch):

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

Esegui come amministratore!

Qualunque modo tu scelga, assicurati di "Esegui come amministratore".

La soluzione più semplice che ho trovato. Lo sto usando da Vista. :)


Stavo pensando di utilizzare WMI in uno script Python o simile - un ottimo esempio di come il batch può essere una soluzione più semplice in determinati scenari.
Lyle Brown,

Uscita CMD + Panoramica del Visualizzatore eventi . Ho usato il tuo secondo esempio via batch come amministratore. Alcune categorie non possono essere cancellate? Strano. E la categoria Powershell ha ancora 11.511 eventi? Tutti gli altri sembrano essere stati cancellati
nixda,

Fottuto dalla mancanza di virgolette. mi dispiace per quello, risolto. :)
Ƭᴇcʜιᴇ007,

È possibile utilizzare questa soluzione o quella proposta da @Logman in Windows XP? Non vedo che ha wevtutilnel sistema.
Sopalajo de Arrierez,

1
@SopalajodeArrierez "wevtutil" è disponibile solo da Vista e versioni successive ... technet.microsoft.com/en-us/library/cc732848.aspx
Logman

19

Apri il prompt di cmd o crea uno script batch ed "esegui come amministratore":

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

Codice Powershell per cancellare tutti i registri eventi:

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

oppure scegli e scegli in uno 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

eccetera...

È possibile ottenere un elenco completo di tutti i nomi delle categorie di eventi digitando quanto segue in un prompt cmd o powershell:

wevtutil el

Ulteriori informazioni sono disponibili su MS TechNet . Esempi:

Esporta eventi dal registro di sistema in C: \ backup \ system0506.evtx:

wevtutil epl System C:\backup\system0506.evtx

Cancella tutti gli eventi dal registro dell'applicazione dopo averli salvati in C: \ admin \ backups \ a10306.evtx:

wevtutil cl Application /bu:C:\admin\backups\a10306.evtx

Bella versione abbreviata.
Ƭᴇcʜιᴇ007,

4
  • wevtutil è piuttosto lento, specialmente quando cancelli tutti i log (compresi quelli vuoti)

  • soluzione più veloce che mi è venuta in mente:


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


Resul: "Eliminati 16 eventi in 4 registri: 0,3684785 secondi"

Ogni parte:

  • ottiene solo i log contenenti eventi (ci saranno LogNames duplicati)

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

  • cancella ognuno

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

Funzione 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 vedi "Get-WinEvent: i dati non sono validi", hai raggiunto il limite massimo non documentato di 256 registri. Potrebbe essere necessario filtrare prima i log. Di seguito verranno selezionati solo i registri con eventi (credito a http://www.powershellish.com/blog/2015/01/19/get-winevent-max-logs/ per la diagnosi):

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

2
Ho ritestato questa funzione. Ci sono voluti 271 secondi per cancellare 168802 eventi
nixda,

1
@nixda: 5 minuti per 169.000 eventi non sono molto veloci, ma non sono sicuro di come si comporterebbe wevtutil con lo stesso numero di eventi (potrebbe anche saltarne alcuni)
paul bica,

3

È importante utilizzare l'opzione delim se hai spazi nei nomi:

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

Puoi anche disabilitare facilmente tutta la registrazione degli eventi senza interrompere il servizio registro eventi:

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

Naturalmente questo disabiliterà solo gli eventi software effettivamente installati, se si installa un nuovo software, la registrazione sarà abilitata per impostazione predefinita. Ma buona cosa puoi lasciare in esecuzione l'Utilità di pianificazione, quindi fallo ogni mese ;-)


Come posso ripristinare il tuo secondo comando (con SL e / e: false)? O come posso ripristinare tutte le proprietà del mio registro eventi sui valori predefiniti?
Peter,

Caro PeterCo. Non sono sicuro di cosa intendi per impostazione predefinita. Controllare la documentazione per il comando WEVTUTIL, ad esempio provare ad accedere WEVTUTIL sl /?da una riga di comando.
Xan-Kun Clark-Davis,

2

A proposito, questo cancella tutti i file di registro, che possono (a seconda delle impostazioni precedenti) liberare abbastanza spazio

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

1

Ho usato i file .bat per rendere un po 'più semplice la cancellazione dei file di registro. Ho appena scelto la semplice sceneggiatura quihttp://winaero.com/blog/how-to-clear-the-windows-event-log-from-the-command-line/

Copiato da quel 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. Apri Blocco note e copia e incolla il testo in esso.

  2. Salvalo come file batch e assegnagli il nome che desideri, ad esempio: ClEvtLog.bat o ClEvtLog.cmd.

  3. Eseguilo con i diritti di amministratore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.