¿Cómo borrar los registros de eventos de Windows usando la línea de comandos?

14

Normalmente puedo abrir la consola de Computer Management, ir al complemento Visor de eventos, abrir la carpeta Registros de Windows, hacer clic derecho en la Application/Security/Setup/Systemsubcarpeta, elegir Borrar registro y confirmar presionando el botón Clearo Save and Clear.

Teniendo suficientes derechos, ¿cómo puedo lograr el mismo efecto mediante el uso de la línea de comandos, sin generar solicitudes de confirmación?

Ivan
fuente

Respuestas:

13

Potencia Shell.

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

El valor predeterminado no es avisarle, pero puede proporcionar el interruptor -Confirmar si desea que se le solicite.

Editar:

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

Según los comentarios, eso debería obtener registros tanto operativos como administrativos.

Ryan Ries
fuente
Gracias powershell -Command "Clear-Eventlog -Log Application, System"trabaja. Pero para el registro de configuración dice The Log name "Setup" does not exist in the computer "localhost".:-( ¿Alguna idea sobre cómo borrar el registro de configuración?
Ivan
Ah, sí, el problema es que el registro de configuración es técnicamente un tipo diferente de registro que los demás. Es un registro operativo en lugar de un registro administrativo. Puede borrar los registros de administración y operación con la clase EventLogSession .NET, pero ese cmdlet de Powershell aparentemente no usa esa clase .NET. :( Intente este comando en su lugar para borrar TODOS los registros: Get-WinEvent -ListLog * -Force |% {Wevtutil.exe cl $ _. Logname}
Ryan Ries
Aún mejor, simplemente reemplace el asterisco con la lista de registros que desea borrar. Aplicación, configuración, seguridad ... etc.
Ryan Ries
Parece funcionar pero dice "No se pudo borrar el registro DebugChannel. La operación solicitada no se puede realizar a través de un canal directo habilitado. El canal primero se debe deshabilitar antes de realizar la operación solicitada".
Ivan
2
Siempre habrá esos eventos "Borrar registro" en el registro del sistema. Siempre. Incluso si borra el registro del sistema en último lugar, le quedará al menos un evento de borrado del registro para el registro del sistema en sí. No se preocupe por el error de DebugChannel, ya que ese es otro caso especial. Simplemente use los nombres específicos de los registros de eventos que desea borrar en lugar del asterisco. Funciona de cualquier manera, pero no intente borrar DebugChannel si no desea ver un error.
Ryan Ries
8

wevtutil enum-logsenumerará todos los registros en el sistema mientras wevtutil clear-logborrará los registros. Para su caso sería:

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

También puede hacer una copia de seguridad mientras limpia con wevtutil clear-log System /backup:backup.evtx

mprill
fuente
2

Para el caso que desea borrar todos los registros :

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

Extraído de aquí .

Sopalajo de Arrierez
fuente
2

El siguiente PowerShell borra todos los registros de eventos en la máquina local, incluidos los registros operativos / de depuración / configuración mediante programación (sin instanciar el proceso "wevtutil"). Para borrar solo un registro, modifique el código en consecuencia. Sin embargo, no es perfecto, a veces los registros de depuración se mantienen abiertos por algo, y esto no genera ningún error.

$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
fuente
0

así es como borrar todo el registro de eventos a través de powershell, asegúrese de ejecutarlo como administrador

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

neoghost
fuente
2
Esta respuesta necesita una explicación.
kasperd