Запрос Powershell Get-eventlog. Как вернуть Х количество записей, соответствующих критериям

Я хотел бы найти самое последнее появление списка определенных идентификаторов событий для нескольких серверов. Я не вижу хорошего способа сделать это. Если я использую -newest Переключатель Я должен поиграть с числом, основанным на относительном размере журнала событий каждого сервера и шансах событий, в которых я заинтересован, происходить в этом числе записей. В моем примере ниже, сервер F6WINMSSTEST3 не имеет то, что я ищу в первых 10000 записей. Кто-нибудь знает хороший способ сделать это?

Я хотел бы перечислить отдельные экземпляры последней записи для каждого идентификатора событий, которые я ищу, для каждого сервера, чтобы я мог видеть, когда они произошли. В идеальном мире каждый сервер перечисляет самые последние 3 идентификатора.

$Servers = "F6WINMSSTEST","F6WINMSSTEST2","F6WINMSSTEST3","F6WINMSSTEST4","F6WINMSSTEST5" 

Foreach ($server in $Servers) {

$server

get-eventlog -computer $server -logname system -newest 10000 | where-object { $_.eventid -   eq 6005 -or  $_.eventid -eq 6009 -or  $_.eventid -eq 6006} } 

Образец вывода:

F6WINMSSTEST

   Index Time          EntryType   Source                 InstanceID Message                                                                                                                               
   ----- ----          ---------   ------                 ---------- -------                                                                                                                               
  108265 Feb 08 08:33  Information EventLog               2147489653 The Event log service was started.                                                                                                    
  108264 Feb 08 08:33  Information EventLog               2147489657 Microsoft (R) Windows (R) 6.01. 7601 Service Pack 1 Multiprocessor Free.                                                              
  108247 Feb 08 08:31  Information EventLog               2147489654 The Event log service was stopped.                                                                                                    
  104703 Nov 16 08:41  Information EventLog               2147489653 The Event log service was started.                                                                                                    
  104702 Nov 16 08:41  Information EventLog               2147489657 Microsoft (R) Windows (R) 6.01. 7601 Service Pack 1 Multiprocessor Free.                                                              
  104688 Nov 16 08:39  Information EventLog               2147489654 The Event log service was stopped.                                                                                                    
F6WINMSSTEST2
   39265 Jul 06 08:01  Information EventLog               2147489653 The Event log service was started.                                                                                                    
   39264 Jul 06 08:01  Information EventLog               2147489657 Microsoft (R) Windows (R) 6.00. 6002 Service Pack 2 Multiprocessor Free.                                                              
   39249 Jul 06 08:00  Information EventLog               2147489654 The Event log service was stopped.                                                                                                    
   39060 Jul 06 02:03  Information EventLog               2147489653 The Event log service was started.                                                                                                    
   39059 Jul 06 02:03  Information EventLog               2147489657 Microsoft (R) Windows (R) 6.00. 6002 Service Pack 2 Multiprocessor Free.                                                              
   39044 Jul 06 02:02  Information EventLog               2147489654 The Event log service was stopped.                                                                                                    
F6WINMSSTEST3
F6WINMSSTEST4
    6591 Jul 06 08:01  Information EventLog               2147489653 The Event log service was started.                                                                                                    
    6590 Jul 06 08:01  Information EventLog               2147489657 Microsoft (R) Windows (R) 5.02. 3790 Service Pack 2 Uniprocessor Free.                                                                
    6589 Jul 06 08:00  Information EventLog               2147489654 The Event log service was stopped.                                                                                                    
    6531 Jul 05 11:52  Information EventLog               2147489653 The Event log service was started.                                                                                                    
    6530 Jul 05 11:52  Information EventLog               2147489657 Microsoft (R) Windows (R) 5.02. 3790 Service Pack 2 Uniprocessor Free.                                                                
    6529 Jul 05 11:51  Information EventLog               2147489654 The Event log service was stopped.                                                                                                    
F6WINMSSTEST5
   55124 Nov 06 19:11  Information EventLog               2147489653 The Event log service was started.                                                                                                    
   55123 Nov 06 19:11  Information EventLog               2147489657 Microsoft (R) Windows (R) 5.02. 3790 Service Pack 2 Uniprocessor Free.                                                                
   55122 Nov 06 19:10  Information EventLog               2147489654 The Event log service was stopped.  

2 ответа

Я написал, а затем удалил этот пост пару раз, и теперь я думаю, что узнал, что происходит.

  • Все, что записывает запись в журнал событий, записывает поле с именем "EventID"
  • Это на самом деле не содержит EventID, он на самом деле содержит некоторые дополнительные данные в старших битах значения
  • EventViewer / PowerShell / и т. Д. Убирают старшие биты и представляют результат как EventId
  • Они отображают исходное значение как InstanceId, которое может соответствовать EventID, но не может.

Это приводит к следующей ситуации:

  • Два совершенно разных события могут иметь один и тот же EventID, это может конфликтовать. Вы также должны проверить, что "Источник" - это тот, который вам нужен.
  • Получение EventID через PowerShell происходит медленно, получение InstanceId происходит быстро, потому что он проиндексирован.

Итак, на ваш вопрос, если вы можете получить одно из этих событий, а затем получить InstanceID, то вы можете спросить Get-EventLog для InstanceIds событий, которые вас интересуют, а затем использовать -newest 1,

Пытаться:

$Servers = "F6WINMSSTEST","F6WINMSSTEST2","F6WINMSSTEST3","F6WINMSSTEST4","F6WINMSSTEST5" 

ForEach ($server in $Servers) {
    Write-Output $server
    Get-EventLog -computer $server -LogName System -InstanceId ?,?,? -Newest 1 
}

Когда вы найдете instanceID.

Определение -Source может быть хорошей идеей тоже

В противном случае это обсуждение: http://social.technet.microsoft.com/Forums/scriptcenter/en-US/616b67ee-9e71-4f23-abb8-5c88e8890b9e/event-logs-relationship-between-instanceid-and-eventid?forum=ITCG, откуда я получил вышеупомянутое, и кто-то с тем же вопросом, что и вы, и они комментируют:

Командлет Get-WinEvent принимает параметр -FilterXML, в котором вы можете указать EventID. Таким образом, это решает проблему для компьютеров более высокого уровня, но для компьютеров более низкого уровня (хотелось бы, чтобы был лучший способ сказать "2000-XP-2K3" / "Vista-7-2008"), мы все равно должны фильтровать после тот факт, если вы понимаете, о чем я.

Если вы можете использовать InstanceId, это должно быть намного быстрее, но я хотел бы увидеть авторитетную ссылку, которая говорит, что она стабильна и надежна, не может конфликтовать или похожая.

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

get-eventlog  -logname system  | where ((eventid -eq 6005) -or (eventid -eq 6006) -or (eventid -eq 6009)) | select -first 1
Другие вопросы по тегам