Wie lösche ich Windows-Ereignisprotokolle über die Befehlszeile?

14

Normalerweise kann ich die Computerverwaltungskonsole öffnen, zum Ereignisanzeige-Snap-In wechseln, den Windows-Protokollordner öffnen, mit der rechten Maustaste auf den Application/Security/Setup/SystemUnterordner klicken , Protokoll löschen auswählen und mit der Taste Clearoder bestätigen Save and Clear.

Wie kann ich den gleichen Effekt erzielen, wenn ich über die Befehlszeile genügend Rechte habe und keine Bestätigungsanfragen erhebe?

Ivan
quelle

Antworten:

13

Power Shell.

PS C:\>Clear-Eventlog -Log Application, System

Standardmäßig werden Sie nicht dazu aufgefordert, aber Sie können den Schalter -Confirm angeben, wenn Sie dazu aufgefordert werden möchten.

Bearbeiten:

Get-WinEvent -ListLog Application,Setup,Security -Force | % { Wevtutil.exe cl $_.Logname }

Wie in den Kommentaren angegeben, sollte dies sowohl Betriebs- als auch Verwaltungsprotokolle enthalten.

Ryan Ries
quelle
Danke, powershell -Command "Clear-Eventlog -Log Application, System"funktioniert. Aber für das Setup-Protokoll heißt es The Log name "Setup" does not exist in the computer "localhost".:-( Irgendwelche Ideen, wie man das Setup-Protokoll löscht?
Ivan
Ach ja, das Problem ist, dass das Setup-Protokoll technisch eine andere Art von Protokoll ist als die anderen. Es ist ein Betriebsprotokoll anstelle eines Verwaltungsprotokolls. Sie können sowohl Administrations- als auch Betriebsprotokolle mit der .NET-Klasse EventLogSession löschen, aber dieses Powershell-Cmdlet verwendet diese .NET-Klasse anscheinend nicht. :( Versuchen Sie stattdessen diesen Befehl, um ALLE Protokolle zu löschen : Get-WinEvent -ListLog * -Force |% {Wevtutil.exe cl $ _. Logname}
Ryan Ries
Ersetzen Sie den Stern einfach durch die Liste der Protokolle, die Sie löschen möchten. Anwendung, Einrichtung, Sicherheit usw.
Ryan Ries
Scheint zu funktionieren, sagt aber "Fehler beim Löschen des Protokolls DebugChannel. Der angeforderte Vorgang kann nicht über einen aktivierten direkten Kanal ausgeführt werden. Der Kanal muss zuerst deaktiviert werden, bevor der angeforderte Vorgang ausgeführt werden kann."
Ivan
2
Es werden immer diese "Log Clear" -Ereignisse im Systemprotokoll angezeigt. Immer. Selbst wenn Sie das Systemprotokoll zuletzt löschen, bleibt mindestens ein Ereignis zum Löschen des Protokolls für das Systemprotokoll selbst übrig. Machen Sie sich keine Sorgen über den DebugChannel-Fehler, da dies ein weiterer Sonderfall ist. Verwenden Sie einfach die spezifischen Namen der zu löschenden Ereignisprotokolle anstelle des Sternchens. Es funktioniert so oder so, aber versuchen Sie nicht, DebugChannel zu löschen, wenn Sie keinen Fehler sehen möchten.
Ryan Ries
8

wevtutil enum-logslistet alle Protokolle im System auf, während wevtutil clear-logdie Protokolle gelöscht werden. Für Ihren Fall wäre es:

wevtutil clear-log Application
wevtutil clear-log Security
wevtutil clear-log Setup
wevtutil clear-log System

Sie können auch beim Löschen mit sichern wevtutil clear-log System /backup:backup.evtx

mprill
quelle
2

Für den Fall, dass Sie alle Protokolle löschen möchten :

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

Von hier extrahiert .

Sopalajo de Arrierez
quelle
2

Die folgende PowerShell löscht alle Ereignisprotokolle auf dem lokalen Computer, einschließlich der Betriebs- / Debug- / Setup-Protokolle, programmgesteuert (ohne den "wevtutil" -Prozess zu instanziieren). Ändern Sie den Code entsprechend, um nur ein Protokoll zu löschen. Es ist jedoch nicht perfekt, manchmal werden die Debug-Protokolle von etwas offengehalten, und dies erzeugt keine Fehler.

$EventLogs=Get-WinEvent -Force -ListLog *
$EventSession=new-object System.Diagnostics.Eventing.Reader.EventLogSession
foreach ($Log in $EventLogs) {
  if ($Log.IsEnabled) {
    if ($Log.RecordCount -gt 0) { 
      if ($Log.LogType -eq "Debug") {
        $Log.IsEnabled=$false
        $Log.SaveChanges()
        $EventSession.ClearLog($Log.LogName)
        $Log.IsEnabled=$true
        $Log.SaveChanges()
      }
      else { $EventSession.ClearLog($Log.LogName) }
  }
}
Slogmeister Extraordinaire
quelle
0

So löschen Sie das gesamte Ereignisprotokoll über Powershell. Stellen Sie sicher, dass Sie es als Administrator ausführen

wevtutil el | Foreach-Object {wevtutil cl "$_"}

neoghost
quelle
2
Diese Antwort bedarf einer Erklärung.
Kasperd