So löschen Sie schnell alle Windows-Ereignisprotokollkategorien

17

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 Protokoll löschen ... 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?

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

Nixda
quelle

Antworten:

18

Versuchen Sie es mit WEvtUtil.exe

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

Schleife und löschen mit Zwischendatei

In der folgenden Batchdatei werden die Protokolle mithilfe von WEVTUTIL.exe in einer Textdatei aufgelistet und anschließend mithilfe dieser Textdatei alle Protokolle gelöscht.

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" -Batch wird nur fehlerhaft ausgeführt, wenn keine "loglist.txt" gefunden wird "im aktuellen Verzeichnis.)

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

Schleife und lösche direkt

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

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

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

ƬᴇcƬᴇιʜ007
quelle
Ich habe überlegt, WMI in einem Python-Skript oder ähnlichem zu verwenden - ein sehr gutes Beispiel dafür, wie Stapelverarbeitung in bestimmten Szenarien eine einfachere Lösung sein kann.
Lyle Brown
CMD-Ausgabe + Übersicht über die Ereignisanzeige . Verwendete Ihr zweites Beispiel per Batch als admin. Einige Kategorien können nicht gelöscht werden? Seltsam. Und in der Powershell-Kategorie gibt es noch 11.511 Events? Alle anderen scheinen gelöscht zu sein
nixda 06.10.13
Durch einen Mangel an Anführungszeichen geschraubt. Entschuldigung, behoben. :)
ƬᴇcƬᴇιʜ007
Ist es möglich, diese Lösung oder die von @Logman vorgeschlagene in Windows XP zu verwenden? Ich sehe es nicht wevtutilim System.
Sopalajo de Arrierez
1
@SopalajodeArrierez "wevtutil" ist nur unter Vista und höher verfügbar ... technet.microsoft.com/en-us/library/cc732848.aspx
Logman
19

Öffne die cmd Eingabeaufforderung 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

etc...

Sie können eine vollständige Liste aller Ereigniskategorienamen abrufen, indem Sie Folgendes in eine Cmd-Eingabeaufforderung oder in 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
Logman
quelle
Schöne verkürzte Version.
ƬᴇcƬᴇιᴇ007
4
  • 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")}
Paul Bica
quelle
2
Ich habe diese Funktion erneut getestet. Es dauerte 271 Sekunden, um 168802 Ereignisse zu löschen
nixda
1
@nixda: 5 Minuten für 169.000 Ereignisse sind nicht sehr schnell, aber ich bin mir nicht sicher, wie wevtutil mit der gleichen Anzahl von Ereignissen abschneiden würde (es können auch einige davon
übersprungen werden
3

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 Sie den Taskplaner laufen lassen können, tun Sie es einfach jeden Monat ;-)

Xan-Kun Clark-Davis
quelle
Wie kann ich Ihren zweiten Befehl zurücksetzen (mit SL und / e: false)? Oder wie kann ich alle meine Ereignisprotokolleigenschaften auf die Standardeinstellungen zurücksetzen?
PeterCo
Lieber PeterCo. Ich bin mir nicht sicher, was du standardmäßig meinst. Überprüfen Sie die Dokumentation zum Befehl WEVTUTIL, z. B. versuchen Sie, WEVTUTIL sl /?eine Befehlszeile einzugeben .
Xan-Kun Clark-Davis
2

Ü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
Xan-Kun Clark-Davis
quelle
1

Ich habe .bat-Dateien verwendet, um das Löschen von Protokolldateien zu vereinfachen. Ich habe hier nur das einfache Drehbuch ausgewählthttp://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.

Sakari Niittymaa
quelle