Как показать журналы событий, содержащие определенный текст из powershell

624
Jon

Я пытаюсь быстро показать все события за последний день в журнале событий окна, которые содержат определенную строку в Power Shell.

Я нашел команды powershell для перечисления событий, но я в основном хочу «GREP» их для конкретного текста.

Мне нужно использовать powershell, потому что целью является Windows Server 2016 Hyper-V, но я думаю, что было бы весьма полезно иметь возможность быстрого поиска последних событий на любом компьютере с powershell.

Чтобы показать доступные журналы, я запускаю:

PS C: \ Users \ Администратор> 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 

В этом примере мой целевой журнал называется Application

Я могу распечатать последние 24 часа журнала на консоли с:

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

Я попытался отфильтровать вывод, используя, Select-Stringно это никогда не совпадало ни с одной строкой.

1

2 ответа на вопрос

2
Jon

Вот что я в итоге сделал. Он ищет значение нескольких свойств события для текста и показывает их на консоли:

$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 

Пример вывода:

 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. 

Я новичок в powershell, так что это может быть не самый лучший способ, но он работает. Я надеюсь, что это сэкономит кому-то еще время.

1
postanote

Рад, что у тебя это работает.

Обратите внимание. Вы могли бы использовать этот подход, чтобы немного упростить его ...

Этот подход будет искать все свойства, переданные для строкового значения, и возвращать совпадения, без необходимости иметь дело с регистром или указанием строки поиска для свойства отдельно.

$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