Windows 10-Ereignisprotokoll im „Follow“-Modus (Echtzeit) im Terminal anzeigen?

Windows 10-Ereignisprotokoll im „Follow“-Modus (Echtzeit) im Terminal anzeigen?

Wenn ich unter Linux die Systemanmeldung im Terminal in Echtzeit beobachten möchte, kann ich den tailBefehl zum Ausgeben der /var/log/syslogDatei mit dem Schalter „ -foder“ verwenden --follow, der „angehängte Daten ausgibt, während die Datei wächst“, sagen wir:

tail -f /var/log/syslog

... oder könnte auch verwenden:

dmesg --follow

... wobei -w, --followdas Argument für dmesg„Warten auf neue Nachrichten“ steht.

In jedem Fall blockieren beide Anwendungen in diesem Modus im Allgemeinen das Terminal und geben dann neue Textzeilen/Nachrichten aus, sobald sie eingehen, bis Sie Strg-C drücken, um sie zu beenden.

Unter Windows ist meines Wissens das Äquivalent zum Systemprotokoll der Event (Log) Viewer, eine GUI-Anwendung. Nach einiger Zeit fand ichhttps://www.petri.com/command-line-event-log– darin wird darauf hingewiesen, dass man mit der WEVTUTIL.EXEBefehlszeilen-Anwendung das Windows-Ereignisprotokoll abfragen kann.

Also, ich habe Folgendes versucht:

C:\>wevtutil qe System

... aber hierdurch werden einfach alle Ereignisse ausgegeben und dann beendet (genauso, als ob Sie es dmesgunter Linux ohne Argumente aufrufen würden).

Ich habe die Hilfe durchgesehen wevtutil /?, kann jedoch kein Befehlszeilenargument finden, das den wevtutilModus „Follow“ aktivieren würde (d. h., es blockiert das Terminal, nachdem es alles bis zu diesem Punkt ausgegeben hat, und druckt dann neue Ereignisse/Textzeilen, während sie protokolliert werden).

Ist es also möglich, wevtutilim Follow-Modus zu arbeiten, und wenn ja, wie? Wenn nicht, gibt es ein anderes Dienstprogramm, das ich verwenden könnte und das dasselbe tun würde – das Systemereignisprotokoll von Windows im Follow-Modus auf das Terminal übertragen?

Antwort1

Gehe zusysinternals.com, dann schauen Sie sich die Dokumentation für ProcessExplorer an. Sie können Filter für EXE, Ereignisse, Nachrichten und in Echtzeit oder Dauer festlegen. Sie können auch verfolgen und debuggen. Sysinternals Suite bietet viel bessere Details als die Ereignisanzeige.

  1. Process Explorer
  2. ProzessMonitor
  3. ProzessDump

Wenn Sie die benötigten Ereignisse oder Objekte gefunden haben, überprüfen Sie die Eigenschaften, um zu sehen, was Sie im Terminal aufrufen können.

Antwort2

OK, also habe ich noch etwas genauer nachgeschaut und Folgendes gefunden:

... das Beispiele für die Verwendung von PowerShell für dieses Verhalten enthält. Basierend auf diesem Beitrag habe ich Folgendes getan:

Zuerst wollte ich ein PowerShell-Skript erstellen. Die Seitehttps://www.windowscentral.com/so-erstellen-und-führen-sie-ihre-erste-powershell-script-file-windows-10weist darauf hin, dass die Erweiterung für ein PowerShell-Skript lautet .ps1.

Dann wollte ich das Skript speziell im Stammverzeichnis des Laufwerks erstellen C:. Es stellte sich heraus, dass dies in Windows 10 geschützt ist - Sie müssen dazu über Administratorrechte verfügen (sonst erhalten Sie Access is denied.). Also habe ich die Eingabeaufforderung im Administratormodus gestartet („Als Administrator ausführen“) und diese beiden Dateien erstellt:

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

Beachten Sie, dass diese Dateien nicht leer sind, sondern die Textzeile enthalten ECHO is on.- diese Zeile kann jedoch gelöscht werden; oder (https://ss64.com/ps/syntax-comments.html) mit dem Präfix #, das in PowerShell das Kommentarzeichen ist.

Anschließend habe ich diese Dateien im Editor geöffnet, um sie zu bearbeiten – vom selben Terminal aus, sodass die Administratorrechte erhalten bleiben (sonst wird der Zugriff verweigert, wenn man versucht, die Dateien im Editor zu speichern):

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

Dann habe ich diesen Code aus SO:15262196 wie folgt eingefügt 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
}

... und ich habe den Code aus demandere Antwortin wevent_tail_02.ps1, aber ich konnte es nicht ganz zum Laufen bringen. Daher werde ich im Rest dieses Beitrags nur verwenden wevent_tail_01.ps1.

Jetzt ist es an der Zeit, dieses Skript in PowerShell auszuführen. Im Beitrag von WindowsCentral wird darauf hingewiesen, dass Skripts ausgeführt werden, indem ihrem Pfad ein Et-Zeichen und ein Leerzeichen vorangestellt werden &. Wenn Sie PowerShell jedoch normal starten und es versuchen, erhalten Sie Folgendes:

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

Im Beitrag von WindowsCentral wird empfohlen, Set-ExecutionPolicy RemoteSigneddieses Problem zu beheben. Damit dieser Befehl jedoch abgeschlossen werden kann, müssen Sie PowerShell erneut mit Administratorrechten ausführen. Sie können es jedoch auch auf den aktuellen Benutzer beschränken. In diesem Fall können Sie die normal gestartete PowerShell beibehalten:

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:\>

An diesem Punkt sollten wir über die Berechtigung zum Ausführen unseres Skripts verfügen:

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

... und netterweise blockiert das Skript das Terminal, aber höchstwahrscheinlich wird kein Text ausgegeben. Wir möchten also testen, ob das funktioniert.

Dazu müssen wir eine weitere PowerShell öffnen, allerdings mit administrativen Eigenschaften; die richtigen Informationen habe ich gefunden aufhttps://mcpmag.com/articles/2016/09/08/powershell-to-write-to-the-event-log.aspx- kurz gesagt: Um beliebige Dinge in die Windows-Ereignisprotokolle zu schreiben, müssen wir eine „Quelle“ angeben:

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

... und dann können wir Write-EventLogin das Ereignisprotokoll schreiben:

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

Wenn wir jetzt zur ersten PowerShell wechseln, wo sie C:\wevent_tail_01.ps1ausgeführt wurde und blockierte, sollten wir etwa Folgendes sehen:

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

Tatsächlich habe ich dies zunächst nicht gesehen, als ich zu diesem Terminal gewechselt bin, aber dann habe ich, glaube ich, einmal mit der rechten Maustaste darauf geklickt, und es ist „aufgewacht“ und hat dann begonnen, in Echtzeit Zeilen auszugeben.

Nun, ich schätze, das ist es, was ich wollte – obwohl ich irgendwie gehofft hatte, dass es etwas einfacher gewesen wäre …


BEARBEITEN: Wenn Sie sowohl das System- als auch das Anwendungsprotokoll „verfolgen“ möchten, hier ist das PowerShell-Skript:

$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
}

... und um zu testen,habenum einen neuen Anbieter mit einem eindeutigen Namen zu erstellen, der im Anwendungsprotokoll registriert ist, also:

New-EventLog -LogName Application -Source 'MyAppTest'

... die Du testen/anwerfen kannst:

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

verwandte Informationen