web-dev-qa-db-fra.com

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

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 Clear Log ... dans le volet de droite.

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

enter image description hereenter image description here

17
nixda

Essayez WEvtUtil.exe

L'interface graphique ne permet pas d'effacer tous les journaux à la fois. Du moins pas que j'ai jamais trouvé. :)

Boucle et suppression avec fichier intermédiaire

Voici un fichier de commandes qui utilise WEVTUTIL.exe pour répertorier les journaux dans un fichier texte, puis utiliser 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é avec tout cela dans un fichier batch, vous pouvez alors l'enregistrer dans deux fichiers séparés, puis les exécuter l'un après l'autre:
(Le lot "Nuke" n'entraînera qu'une erreur s'il ne trouve pas un "loglist.txt" dans son répertoire actuel.)

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

Boucler et supprimer directement

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

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

Exécuter en tant qu'administrateur!

Quelle que soit la méthode choisie, assurez-vous "Exécuter en tant qu'administrateur".

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

18
Ƭᴇcʜιᴇ007

Ouvrez l'invite cmd ou créez un script de commande et exécutez-la 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 un invite cmd ou un PowerShell:

wevtutil el

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

Exporter 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
19
Logman
  • wevtutil est assez lent, spécialement lorsque vous effacez tous les journaux (y compris ceux 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")}


Resul: "Effacement de 16 événements dans 4 journaux: 0.3684785 secondes"

Chaque partie:

  • récupère uniquement les journaux contenant des événements (il y aura des noms de fichiers en double)

    ForEach ($ l dans (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 matérielle non documentée de 256 journaux. Il peut être nécessaire de filtrer les journaux en premier. Ce qui suit ne sélectionnera que les journaux qui ont 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")}
4
paul bica

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 facilement désactiver la journalisation des événements sans arrêter le service de journalisation 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 bon, vous pouvez laisser le planificateur de tâches en marche, alors faites-le tous les mois ;-)

3

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

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

J'ai utilisé des fichiers .bat pour faciliter l'effacement des fichiers journaux. Je viens de choisir le script simple ici http://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 attribuez-lui le nom de votre choix, par exemple: ClEvtLog.bat ou ClEvtLog.cmd.

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

1
Sakari Niittymaa