So erhalten Sie das Anwendungsereignisprotokoll

So erhalten Sie das Anwendungsereignisprotokoll

Ich habe einige Server, die häufig 1000er-Fehler haben. Ich möchte herausfinden, ob es immer dieselbe Anwendung ist oder ob es verschiedene Anwendungen sind. Ich verwende Folgendes:

Get-EventLog application 1000 -entrytype error -newest 10 | select timegenerated,message | Export-Csv errors.csv

und die Ausgabe zeigt den Anwendungsnamen (speziell die EXE-Datei) als Teil des mehrzeiligen Nachrichtenfelds.

Ich konnte nicht herausfinden, wie ich nur den Anwendungsnamen aus der Ausgabe extrahieren kann.

Durch das Weiterleiten der Ausgabe an Get-Member sieht es so aus, als wäre das Nachrichtenfeld ein Array, aber ich kann an diesem Punkt nicht herausfinden, wie ich diesen Teil des Arrays extrahieren kann.


Get-EventLog application 1000 -entrytype error -newest 10 | %{$_.machinename,$_.timegenerated,$_.ReplacementStrings[0]}

Dadurch erhalte ich die gewünschte Ausgabe, allerdings wird sie über drei Zeilen generiert und Export-CSV kann sie nicht richtig analysieren. Wie bekomme ich sie alle in eine Zeile?

Antwort1

Dies ist wahrscheinlich nicht für alle Ereignistypen zutreffend, aber die Eigenschaft ReplacementStringsist ein Array, bei dem das erste Element der Name der ausführbaren Datei ist, wenn man sich InstanceID 1000 ansieht:

> Get-EventLog application 1000 -entrytype error -newest 10 | %{$_.ReplacementStrings[0]}
Ssms.exe
Ssms.exe
Ssms.exe
uniStudio.exe
SwyxIt!.exe
Ssms.exe
uniRTE.exe
uniStudio.exe
Ssms.exe
Ssms.exe

Mein PS-foo ist zu dieser Morgenstunde schwach, aber ich bin sicher, dass es eine Möglichkeit gibt, das mit Ihrem selectBefehl zu kombinieren und es so in Ihre CSV zu exportieren.


Gemäß Ihrem Update erhalten Sie die gewünschte Ausgabe in einem Tabellenformat. Ich weiß export-csvjedoch nicht, wie gut es funktioniert mit:

Get-EventLog application 1000 -entrytype error -newest 10|Format-Table @{Expression={$_.machinename};Label="Machine Name";width=25},@{Expression={$_.timegenerated.DateTime};Label="DateTime";width=25},@{Expression={$_.ReplacementStrings[0]};Label="EXEName";width=25}

Keine Sorge, ich habe es in meinem letzten Update viel zu kompliziert gemacht. Das hier sollte gut funktionieren (ich wusste, dass ich später am Tag besser sein würde):

> Get-EventLog application 1000 -entrytype error -newest 10|Select-Object  timegenerated,message,@{name='Executable';expression={$_.ReplacementStrings[0]}}|Export-CSV errors.csv


TimeGenerated                           Message                                 Executable
-------------                           -------                                 ----------
14/01/2014 7:23:13 AM                   Faulting application name: Ssms.exe,... Ssms.exe
13/01/2014 7:26:44 AM                   Faulting application name: Ssms.exe,... Ssms.exe
10/01/2014 7:30:24 AM                   Faulting application name: Ssms.exe,... Ssms.exe
8/01/2014 5:25:13 PM                    The description for Event ID '1000' ... uniStudio.exe
31/12/2013 3:09:58 PM                   The description for Event ID '1000' ... SwyxIt!.exe
19/12/2013 7:35:21 AM                   Faulting application name: Ssms.exe,... Ssms.exe
18/12/2013 2:55:45 PM                   Faulting application name: uniRTE.ex... uniRTE.exe
18/12/2013 9:25:49 AM                   The description for Event ID '1000' ... uniStudio.exe
18/12/2013 7:32:29 AM                   Faulting application name: Ssms.exe,... Ssms.exe
16/12/2013 1:22:38 PM                   Faulting application name: Ssms.exe,... Ssms.exe

verwandte Informationen