it-swarm.com.de

So löschen Sie schnell alle Windows-Ereignisprotokollkategorien

Unter Windows 7 öffnen Sie die Ereignisanzeige, um mehrere Kategorien zu durchsuchen. Sie können eine einzelne Kategorie auch löschen, indem Sie im rechten Bereich auf Clear Log ... klicken.

Angenommen, ich möchte ALLE Kategorien löschen, soll ich dann klicken und sie einzeln löschen?
Es gibt Dutzende von ihnen. Gibt es einen schnelleren Weg? Vielleicht mit PowerShell?

enter image description hereenter image description here

17
nixda

Versuchen Sie WEvtUtil.exe

Über die GUI besteht keine Möglichkeit, alle Protokolle auf einmal zu löschen. Zumindest nicht, dass ich jemals gefunden habe. :)

Loop und löschen mit Zwischendatei

Hier ist eine Batch-Datei, die WEVTUTIL.exe verwendet, um die Protokolle in einer Textdatei aufzulisten, und dann diese Textdatei verwendet, um jedes der Protokolle zu löschen.

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

Wenn Sie sich nicht sicher fühlen, ob dies alles in einer Batch-Datei enthalten ist, können Sie dies in zwei separaten Dateien speichern und dann nacheinander ausführen:
(Der "Nuke" -Stapel wird nur fehlerhaft angezeigt, wenn in seinem aktuellen Verzeichnis keine "loglist.txt" gefunden wird.)

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

Schleife und lösche direkt

Wie Logman in seiner Antwort hervorhob , kann dies weiter verkürzt werden (und die Notwendigkeit für die Zwischentextdatei entfällt), indem man so etwas wie (% ' s double für Batch-Datei):

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

Als Admin ausführen!

Stellen Sie sicher, dass Sie "Als Administrator ausführen".

Die einfachste Lösung, die ich gefunden habe. Benutze es seit Vista. :)

18

Öffne cmd Prompt oder erstelle ein Batch-Skript und "starte als Admin":

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

PowerShell-Code zum Löschen aller Ereignisprotokolle:

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

oder in einem Skript auswählen:

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

usw...

Sie können eine vollständige Liste aller Ereigniskategorienamen abrufen, indem Sie Folgendes in eine Eingabeaufforderung oder eine PowerShell eingeben:

wevtutil el

Weitere Informationen finden Sie unter MS TechNet . Beispiele:

Exportieren Sie Ereignisse aus dem Systemprotokoll nach C:\backup\system0506.evtx:

wevtutil epl System C:\backup\system0506.evtx

Löschen Sie alle Ereignisse aus dem Anwendungsprotokoll, nachdem Sie sie in C:\admin\backups\a10306.evtx gespeichert haben:

wevtutil cl Application /bu:C:\admin\backups\a10306.evtx
19
Logman
  • wevtutil ist ziemlich langsam, besonders wenn Sie alle Protokolle löschen (auch leere)

  • schnellste Lösung, die ich mir ausgedacht habe:


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


Ergebnis: "16 Ereignisse in 4 Protokollen gelöscht: 0,3684785 Sekunden"

Jeder Teil:

  • ruft nur Protokolle mit Ereignissen ab (es gibt doppelte Protokollnamen)

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

  • lösche jeden

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

Volle Funktion:

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

Wenn Sie "Get-WinEvent: Die Daten sind ungültig" sehen, haben Sie das undokumentierte Hard-Limit von 256 Protokollen erreicht. Möglicherweise müssen die Protokolle zuerst gefiltert werden. Im Folgenden werden nur die Protokolle mit Ereignissen ausgewählt (Gutschrift auf http://www.powershellish.com/blog/2015/01/19/get-winevent-max-logs/ für die Diagnose):

$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

Es ist wichtig, die Option delim zu verwenden, wenn die Namen Leerzeichen enthalten:

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

Sie können die gesamte Ereignisprotokollierung auch ganz einfach deaktivieren, ohne den Ereignisprotokolldienst zu beenden:

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

Dies deaktiviert natürlich nur tatsächlich installierte Software-Ereignisse. Wenn Sie eine neue Software installieren, ist die Protokollierung standardmäßig aktiviert. Aber gut, dass du den Taskplaner laufen lassen kannst, also mach es einfach jeden Monat ;-)

3

Übrigens werden dadurch alle Protokolldateien gelöscht, wodurch (abhängig von den vorherigen Einstellungen) ziemlich viel Speicherplatz frei wird

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

Ich habe .bat-Dateien verwendet, um das Löschen von Protokolldateien zu vereinfachen. Einfach hier das einfache Skript auswählen http://winaero.com/blog/how-to-clear-the-windows-event-log-from-the-command-line/

Von diesem Link kopiert.

@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. Öffnen Sie den Editor und kopieren Sie den Text.

  2. Speichern Sie es als Batch-Datei und geben Sie ihm einen beliebigen Namen, zum Beispiel: ClEvtLog.bat oder ClEvtLog.cmd.

  3. Führen Sie es mit Administratorrechten aus.

1