Comment effacer les journaux d'événements Windows en utilisant la ligne de commande?

14

Normalement, je peux ouvrir la console de gestion de l'ordinateur, aller au composant logiciel enfichable Observateur d'événements, ouvrir le dossier Journaux Windows, cliquer avec le bouton droit sur le Application/Security/Setup/Systemsous-dossier, choisir Effacer le journal et confirmer en appuyant sur le bouton Clearou Save and Clear.

Ayant suffisamment de droits, comment puis-je obtenir le même effet en utilisant la ligne de commande, sans générer de demandes de confirmation?

Ivan
la source

Réponses:

13

Powershell.

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

La valeur par défaut n'est pas de vous inviter, mais vous pouvez fournir le commutateur -Confirm si vous souhaitez être invité.

Éditer:

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

Selon les commentaires, cela devrait obtenir à la fois des journaux opérationnels et administratifs.

Ryan Ries
la source
Merci, ça powershell -Command "Clear-Eventlog -Log Application, System"marche. Mais pour le journal d'installation, il dit The Log name "Setup" does not exist in the computer "localhost".:-( Des idées sur la façon d'effacer le journal d'installation?
Ivan
Ah, oui, le problème est que le journal d'installation est techniquement un type de journal différent des autres. Il s'agit d'un journal opérationnel au lieu d'un journal administratif. Vous pouvez effacer les journaux d'administration et d'opération avec la classe .NET EventLogSession, mais cette applet de commande Powershell n'utilise apparemment pas cette classe .NET. :( Essayez plutôt cette commande pour effacer TOUS les journaux: Get-WinEvent -ListLog * -Force |% {Wevtutil.exe cl $ _. Logname}
Ryan Ries
Encore mieux, remplacez simplement l'astérisque par la liste des journaux que vous souhaitez effacer. Application, configuration, sécurité ... etc.
Ryan Ries
Semble fonctionner, mais indique "Impossible d'effacer le journal DebugChannel. L'opération demandée ne peut pas être effectuée sur un canal direct activé. Le canal doit d'abord être désactivé avant d'effectuer l'opération demandée."
Ivan
2
Il y aura toujours ces événements «Log Clear» dans le journal système. Toujours. Même si vous effacez le journal système en dernier, il vous restera au moins un événement d'effacement de journal pour le journal système lui-même. Ne vous inquiétez pas de l'erreur DebugChannel, car c'est encore un autre cas spécial. Utilisez simplement les noms spécifiques des journaux d'événements que vous souhaitez effacer au lieu de l'astérisque. Cela fonctionne de toute façon, mais n'essayez pas d'effacer DebugChannel si vous ne voulez pas voir une erreur.
Ryan Ries
8

wevtutil enum-logsénumérera tous les journaux du système tandis que wevtutil clear-logles effacera. Pour votre cas ce serait:

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

Vous pouvez également sauvegarder tout en effaçant avec wevtutil clear-log System /backup:backup.evtx

mprill
la source
2

Dans le cas où vous souhaitez effacer tous les journaux :

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

Extrait d' ici .

Sopalajo de Arrierez
la source
2

Le PowerShell suivant efface tous les journaux des événements sur la machine locale, y compris les journaux opérationnels / de débogage / d'installation par programme (sans instancier le processus "wevtutil"). Pour effacer un seul journal, modifiez le code en conséquence. Ce n'est pas parfait, cependant, parfois les journaux de débogage sont maintenus ouverts par quelque chose, et cela ne génère aucune erreur.

$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
la source
0

Voici comment effacer tous les journaux d'événements via PowerShell, assurez-vous de l'exécuter en tant qu'administrateur

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

neoghost
la source
2
Cette réponse a besoin d'une explication.
kasperd