Anzeigen von Ereignisprotokollen, die bestimmten Text aus Powershell enthalten

698
Jon

Ich versuche, schnell alle Ereignisse des letzten ~ Tages im Ereignisprotokoll des Fensters anzuzeigen, die eine bestimmte Zeichenfolge in der Power-Shell enthalten.

Ich habe Powershell-Befehle zum Auflisten von Ereignissen gefunden, aber ich möchte sie grundsätzlich für bestimmten Text "GREP" machen.

Ich muss Powershell verwenden, da das Ziel Windows Server 2016 Hyper-V ist, aber ich denke, es wäre auch sehr nützlich, wenn Sie die neuesten Ereignisse auf jedem Computer mit Powershell schnell durchsuchen könnten.

Um verfügbare Protokolle anzuzeigen, starte ich:

PS C: \ Benutzer \ Administrator> Get-EventLog -List

 Max(K) Retain OverflowAction Entries Log ------ ------ -------------- ------- --- 20,480 0 OverwriteAsNeeded 1,113 Application 20,480 0 OverwriteAsNeeded 0 HardwareEvents 512 7 OverwriteOlder 0 Internet Explorer 20,480 0 OverwriteAsNeeded 0 Key Management Service 512 7 OverwriteOlder 1,539 Microsoft-ServerManagementExperience 20,480 0 OverwriteAsNeeded 28,667 Security 20,480 0 OverwriteAsNeeded 4,857 System 15,360 0 OverwriteAsNeeded 3,654 Windows PowerShell 

In diesem Beispiel heißt mein Zielprotokoll " Anwendung"

Ich kann die letzten 24 Stunden des Protokolls auf die Konsole drucken:

Get-EventLog -LogName system -after (Get-Date).AddDays(-1) 

Ich habe versucht, die Ausgabe mit zu filtern, Select-Stringaber es wurden keine Zeilen gefunden.

1

2 Antworten auf die Frage

2
Jon

Hier ist, was ich am Ende getan habe. Es durchsucht den Wert mehrerer Ereigniseigenschaften für den Text und zeigt sie auf der Konsole an:

$search = "hyper" Get-EventLog -LogName system -after (Get-Date).AddDays(-1) | Where-Object { $_.Category.ToLower().Contains($search.ToLower()) -or $_.Message.ToLower().Contains($search.ToLower()) -or $_.Source.ToLower().Contains($search.ToLower())} | Format-Table -AutoSize -Wrap 

Beispielausgabe:

 Index Time EntryType Source InstanceID Message ----- ---- --------- ------ ---------- ------- 4751 Aug 10 09:13 Information Microsoft-Windows... 23 NIC /DEVICE/ (Friendly Name: Microsoft Hyper-V Network Adapter) is now operational. 4750 Aug 10 09:13 Information Microsoft-Windows... 11 The description for Event ID '11' in Source 'Microsoft-Windows-Hyper-V-Netvsc' cannot be found. The local computer may not have the necessary registr... 4749 Aug 10 09:13 Information Microsoft-Windows... 24 NIC /DEVICE/ (Friendly Name: Microsoft Hyper-V Network Adapter) is no longer operational. 

Ich bin neu bei Powershell, daher ist es vielleicht nicht der beste Weg, aber es funktioniert. Ich hoffe, es wird jemandem etwas Zeit sparen.

1
postanote

Ich bin froh, dass Sie das für Sie arbeiten.

Bemerkung. Sie könnten diesen Ansatz auch gewählt haben, um es ein bisschen zu vereinfachen ...

Bei diesem Ansatz werden alle nach dem Zeichenfolgenwert übergebenen Eigenschaften durchsucht und die Übereinstimmungen zurückgegeben, ohne dass mit Fall oder der Suchzeichenfolge pro Eigenschaft einzeln gearbeitet werden muss.

$Search = 'hyper' (Get-EventLog -LogName system -after (Get-Date).AddDays(-1) |  Select-Object -Property Category,Index,TimeGenerated, EntryType,Source,InstanceID,Message) -match $Search | Format-Table -AutoSize  Category Index TimeGenerated EntryType Source InstanceId Message -------- ----- ------------- --------- ------ ---------- ------- (0) 19637 10-Aug-18 17:06:16 Information Microsoft-Windows-Hyper-V-VmSwitch 233 The operation '8' ... (0) 19636 10-Aug-18 17:06:16 Information Microsoft-Windows-Hyper-V-VmSwitch 234 NIC D6727298-4E... (0) 19635 10-Aug-18 17:05:39 Information Microsoft-Windows-Hyper-V-VmSwitch 233 The operation ... (0) 19634 10-Aug-18 17:05:39 Information Microsoft-Windows-Hyper-V-VmSwitch 234 NIC 75A04E6E-1... (1019) 19621 10-Aug-18 12:33:17 Information Microsoft-Windows-Hyper-V-VmSwitch