¿Ver el registro de eventos de Windows 10 en modo "seguir" (en tiempo real) en la terminal?

¿Ver el registro de eventos de Windows 10 en modo "seguir" (en tiempo real) en la terminal?

En Linux, si quiero observar el inicio de sesión del sistema en la terminal en tiempo real, puedo usar el tailcomando para generar el /var/log/syslogarchivo con el interruptor -fo --follow, que "genera datos agregados a medida que el archivo crece", por ejemplo:

tail -f /var/log/syslog

... o también podría usar:

dmesg --follow

... donde -w, --followel argumento dmesgsignifica "Esperar mensajes nuevos".

En cualquier caso, ambas aplicaciones en este modo generalmente bloquean la terminal y luego descargan nuevas líneas de texto/mensajes a medida que aparecen, hasta que presiona Ctrl-C para salir de ellas.

En Windows, entiendo que el equivalente al registro del sistema es el Visor de eventos (registro), que es una aplicación GUI. Después de un tiempo, encontréhttps://www.petri.com/command-line-event-log- que señala que se puede utilizar la WEVTUTIL.EXEaplicación de línea de comandos para consultar el registro de eventos de Windows.

Entonces, probé esto:

C:\>wevtutil qe System

... pero esto simplemente descarta todos los eventos y luego sale (igual que si llamara dmesga Linux sin ningún argumento).

Revisé la ayuda wevtutil /?, pero no puedo ver ningún argumento de línea de comando que se ponga wevtutilen modo "seguir" (es decir, que bloquee el terminal después de haber descargado todo hasta ese punto y luego imprima nuevos eventos/líneas de texto tal como están). registrado).

Entonces, ¿es posible empezar wevtutila trabajar en modo de seguimiento y, de ser así, cómo? Si no es así, ¿hay otra utilidad que pueda usar y que haga lo mismo: volcar el registro de eventos del sistema de Windows a la terminal en modo de seguimiento?

Respuesta1

Ir asysinternals.com, luego consulte la documentación de ProcessExplorer. Puede configurar filtros para exe, eventos, mensajes y en tiempo real o duración. También puedes rastrear y depurar. Sysinternals Suite ofrece muchos mejores detalles que el visor de eventos.

  1. Explorador de procesos
  2. Monitor de procesos
  3. Volcado de proceso

Una vez que encuentre los eventos u objetos que necesita, verifique las propiedades para ver a qué puede llamar en la terminal.

Respuesta2

Bien, busqué algo un poco más; encontró esto:

... que ofrece ejemplos del uso de PowerShell para este comportamiento. Basado en esta publicación, esto es lo que hice:

Primero, quería crear un script de PowerShell; la páginahttps://www.windowscentral.com/how-create-and-run-your-first-powershell-script-file-windows-10señala que la extensión para un script de PowerShell es .ps1.

Luego, quería crear específicamente el script en la raíz de la unidad C:. Resulta que esto está protegido en Windows 10; debe tener privilegios de administrador para hacer esto (de lo contrario, obtendrá Access is denied.). Entonces, encendí el símbolo del sistema en modo administrador ("Ejecutar como administrador") y creé estos dos archivos:

C:\WINDOWS\system32>cd C:\
C:\>echo > wevent_tail_01.ps1
C:\>echo > wevent_tail_02.ps1

Tenga en cuenta que estos archivos no estarán vacíos, pero tendrán la línea de texto ECHO is on.; sin embargo, esa línea se puede eliminar; o (https://ss64.com/ps/syntax-comments.html) con el prefijo #que es el carácter de comentario en PowerShell.

Luego, abrí esos archivos en el Bloc de notas para editarlos, desde el mismo terminal, por lo que se mantienen los privilegios administrativos (de lo contrario, se le negará el acceso al intentar guardar los archivos desde el Bloc de notas):

C:\>notepad wevent_tail_01.ps1
C:\>notepad wevent_tail_02.ps1

Luego, pegué este código de SO:15262196 como wevent_tail_01.ps1:

$idx = (get-eventlog -LogName System -Newest 1).Index

while ($true)
{
  start-sleep -Seconds 1
  $idx2  = (Get-EventLog -LogName System -newest 1).index
  get-eventlog -logname system -newest ($idx2 - $idx) |  sort index
  $idx = $idx2
}

... y pegué el código delotra respuestaen wevent_tail_02.ps1, pero no pude hacerlo funcionar. Entonces, en el resto de esta publicación, solo usaré wevent_tail_01.ps1.

Ahora es el momento de ejecutar este script en PowerShell; la publicación de Windows Central señala que los scripts se ejecutan anteponiendo su ruta con un signo y un espacio &; sin embargo, si inicia PowerShell normalmente y lo prueba, obtendrá:

PS C:\> & "C:\wevent_tail_01.ps1"
& : File C:\wevent_tail_01.ps1 cannot be loaded because running scripts is disabled on this system. For more
information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:3
+ & "C:\wevent_tail_01.ps1"
+   ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

La publicación de Windows Central recomienda utilizar Set-ExecutionPolicy RemoteSignedpara solucionar este problema, pero para completar este comando, deberá volver a ejecutar PowerShell con privilegios administrativos; sin embargo, también puede limitarlo al usuario actual, en cuyo caso puede mantener el PowerShell iniciado normalmente:

PS C:\> Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
you to the security risks described in the about_Execution_Policies help topic at
https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): A
PS C:\>

Entonces, en este punto, deberíamos tener permiso para ejecutar nuestro script:

PS C:\> & "C:\wevent_tail_01.ps1"

... y bueno, el script bloqueará la terminal, pero lo más probable es que no se descargue ningún texto. Entonces, nos gustaría probar y ver si esto funciona.

Para ello necesitaremos abrir otro PowerShell, pero con propiedades administrativas; Encontré la información correcta enhttps://mcpmag.com/articles/2016/09/08/powershell-to-write-to-the-event-log.aspx- en resumen: para escribir cosas arbitrarias en los registros de eventos de Windows, necesitamos especificar una "fuente":

PS C:\WINDOWS\system32> New-EventLog -LogName System -Source 'MySysTest'

... y luego, podemos usar Write-EventLogpara escribir en el registro de eventos:

PS C:\WINDOWS\system32> Write-EventLog -LogName "System" -Source "MySysTest" -EventID 3001 -EntryType Information -Message "MyApp added a user-requested feature to the display." -Category 1 -RawData 10,20
PS C:\WINDOWS\system32> Write-EventLog -LogName "System" -Source "MySysTest" -EventID 3001 -EntryType Warning -Message "MyApp added a user-requested feature to the display." -Category 1 -RawData 10,20
PS C:\WINDOWS\system32> Write-EventLog -LogName "System" -Source "MySysTest" -EventID 3001 -EntryType Error -Message "MyApp added a user-requested feature to the display." -Category 1 -RawData 10,20

Si ahora cambiamos al primer PowerShell, donde se C:\wevent_tail_01.ps1estaba ejecutando y bloqueando, deberíamos ver algo como:

PS C:\> & "C:\wevent_tail_01.ps1"

   Index Time          EntryType   Source                 InstanceID Message
   ----- ----          ---------   ------                 ---------- -------
    2577 Jun 27 10:34  Information MySysTest                    3001 MyApp added a user-requested feature to the dis...
    2578 Jun 27 10:35  Warning     MySysTest                    3001 MyApp added a user-requested feature to the dis...
    2579 Jun 27 10:35  Error       MySysTest                    3001 MyApp added a user-requested feature to the dis...

De hecho, al principio no vi esto al cambiar a esta terminal, pero luego creo que hice clic derecho una vez y "se despertó" y luego comenzó a descargar líneas en tiempo real.

Bueno, supongo que esto es lo que quería, aunque esperaba que hubiera sido un poco más fácil...


EDITAR: si desea "seguir" el registro del sistema y de la aplicación, aquí está el script de PowerShell:

$sidx = (get-eventlog -LogName System -Newest 1).Index
$aidx = (get-eventlog -LogName Application -Newest 1).Index

while ($true)
{
  start-sleep -Seconds 1
  $sidx2  = (Get-EventLog -LogName System -newest 1).index
  $aidx2  = (Get-EventLog -LogName Application -newest 1).index
  get-eventlog -logname system -newest ($sidx2 - $sidx) |  sort index
  get-eventlog -logname application -newest ($aidx2 - $aidx) |  sort index
  $sidx = $sidx2
  $aidx = $aidx2
}

... y para probar, tutenerpara crear un nuevo proveedor, con un nombre único, registrado en el registro de la aplicación, entonces:

New-EventLog -LogName Application -Source 'MyAppTest'

... que puedes probar/iniciar con:

Write-EventLog -LogName "Application" -Source "MyAppTest" -EventID 3001 -EntryType Error -Message "MyApp added a user-requested feature to the display." -Category 1 -RawData 10,20

información relacionada