Comment effacer rapidement toutes les catégories du journal des événements Windows

17

Sous Windows 7, vous ouvrez l'Observateur d'événements pour parcourir plusieurs catégories. Vous pouvez également effacer une seule catégorie en cliquant sur Effacer le journal ... dans le volet droit.

En supposant que je veux effacer TOUTES les catégories, suis-je censé cliquer et les effacer une par une?
Il y en a des dizaines. Y at-il un moyen plus rapide? Peut-être avec PowerShell?

entrez la description de l'image ici entrez la description de l'image ici

nixda
la source

Réponses:

18

Essayez WEvtUtil.exe

Il n'y a aucun moyen via l'interface graphique d'effacer tous les journaux à la fois. Du moins pas que j'aie jamais trouvé. :)

Boucle et suppression avec un fichier intermédiaire

Voici un fichier de commandes qui utilise WEVTUTIL.exe pour répertorier les journaux dans un fichier texte, puis utilisez ce fichier texte pour supprimer chacun des journaux.

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

Si vous ne vous sentez pas en sécurité de disposer de tout cela dans un fichier de commandes, vous pouvez l'enregistrer dans deux fichiers distincts, puis l'exécuter l'un après l'autre:
(Le lot "Nuke" ne fera qu'une erreur s'il ne trouve pas de "loglist.txt" "dans son répertoire actuel.)

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

Boucle et supprime directement

Comme Logman l'a souligné dans sa réponse , cela peut être encore raccourci (et éliminer la nécessité du fichier texte intermédiaire) en utilisant quelque chose comme (% double pour le fichier de commandes):

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

Exécuter en tant qu'administrateur!

Quelle que soit la manière que vous choisissez, assurez-vous de "Exécuter en tant qu'administrateur".

La solution la plus simple que j'ai trouvée. Je l'utilise depuis Vista. :)

Ƭᴇcʜιᴇ007
la source
J'envisageais d'utiliser WMI dans un script python ou similaire - très bon exemple de la façon dont le batch peut être une solution plus facile dans certains scénarios.
Lyle Brown
Sortie CMD + Aperçu de l'observateur d'événements . Utilisé votre deuxième exemple via batch en tant qu'administrateur. Certaines catégories ne peuvent pas être effacées? Étrange. Et la catégorie Powershell a encore 11.511 événements? Tous les autres semblent être effacés
nixda
Vissé par un manque de guillemets. désolé, corrigé. :)
Ƭᴇcʜιᴇ007
Est-il possible d'utiliser cette solution ou celle proposée par @Logman dans Windows XP? Je ne vois pas cela wevtutildans le système.
Sopalajo de Arrierez
1
@SopalajodeArrierez "wevtutil" est uniquement disponible à partir de Vista et supérieur ... technet.microsoft.com/en-us/library/cc732848.aspx
Logman
19

Ouvrez l'invite cmd ou créez un script de commandes et "exécutez en tant qu'administrateur":

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

Code Powershell pour effacer tous les journaux d'événements:

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

ou choisissez dans un 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...

Vous pouvez obtenir une liste complète de tous les noms de catégories d'événements en tapant ce qui suit dans une invite cmd ou un PowerShell:

wevtutil el

Plus d'informations peuvent être trouvées sur MS TechNet . Exemples:

Exportez les événements du journal système vers C: \ backup \ system0506.evtx:

wevtutil epl System C:\backup\system0506.evtx

Effacez tous les événements du journal des applications après les avoir enregistrés dans C: \ admin \ backups \ a10306.evtx:

wevtutil cl Application /bu:C:\admin\backups\a10306.evtx
Logman
la source
Belle version raccourcie.
Ƭᴇcʜιᴇ007
4
  • wevtutil est assez lent, spécialement lorsque vous effacez tous les journaux (y compris les journaux vides)

  • la solution la plus rapide que j'ai trouvée:


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


Résultat: "Effacé 16 événements dans 4 journaux: 0,3684785 secondes"

Chaque partie:

  • obtient uniquement les journaux contenant des événements (il y aura des noms de journaux en double)

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

  • effacer chacun

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

Fonction complète:

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

Si vous voyez "Get-WinEvent: les données ne sont pas valides", vous avez atteint la limite stricte non documentée de 256 journaux. Il peut être nécessaire de filtrer les journaux en premier. Les éléments suivants sélectionneront uniquement les journaux contenant des événements (crédit à http://www.powershellish.com/blog/2015/01/19/get-winevent-max-logs/ pour le diagnostic):

$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
la source
2
J'ai retesté cette fonction. Il a fallu 271 secondes pour effacer 168802 événements
nixda
1
@nixda: 5 minutes pour 169 000 événements n'est pas très rapide, mais je ne sais pas comment wevtutil se comporterait avec le même nombre d'événements (il peut également en ignorer certains)
paul bica
3

Il est important d'utiliser l'option delim si vous avez des espaces dans les noms:

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

Vous pouvez également désactiver facilement tous les journaux d'événements sans arrêter le service de journal des événements:

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

Bien sûr, cela ne désactivera que les événements logiciels réellement installés, si vous installez un nouveau logiciel, la journalisation sera activée par défaut. Mais heureusement, vous pouvez laisser le Planificateur de tâches fonctionner, alors faites-le tous les mois ;-)

Xan-Kun Clark-Davis
la source
Comment puis-je annuler votre deuxième commande (avec SL et / e: false)? Ou comment puis-je restaurer toutes les propriétés de mon journal des événements par défaut?
PeterCo
Cher PeterCo. Je ne suis pas sûr de ce que vous entendez par défaut. Consultez la documentation de la commande WEVTUTIL, par exemple essayez d'entrer WEVTUTIL sl /?sur une ligne de commande.
Xan-Kun Clark-Davis
2

BTW, cela efface tous les fichiers journaux, ce qui peut (en fonction des paramètres précédents) libérer assez d'espace

WEVTUTIL EL > .\LOGLIST.TXT
for /f "delims=" %%a in ( .\LOGLIST.TXT ) do WEVTUTIL CL "%%a"
del .\LOGLIST.TXT
timeout 10
Xan-Kun Clark-Davis
la source
1

J'ai utilisé des fichiers .bat pour faciliter un peu l'effacement des fichiers journaux. Je viens de choisir le script simple icihttp://winaero.com/blog/how-to-clear-the-windows-event-log-from-the-command-line/

Copié à partir de ce lien.

@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. Ouvrez le Bloc-notes et copiez-collez-y le texte.

  2. Enregistrez-le en tant que fichier de commandes et donnez-lui le nom que vous souhaitez, par exemple: ClEvtLog.bat ou ClEvtLog.cmd.

  3. Exécutez-le avec les droits d'administrateur.

Sakari Niittymaa
la source