powershell get-eventlog добавить, если более 5 раз

Я использую:

"%windir%\system32\WindowsPowerShell\v1.0\powershell.exe" $log=Get-EventLog -LogName Security -InstanceID  4625 -After (Get-Date).AddDays(-60); if (($log)) {Write-Output $log[0].Message} ELSE {Write-Output 'WARNING-NoEventFound'} 

Это работает идеально для меня. Я хочу расширить, если это возможно, и сказать, напишите вывод, если событие произошло более 5 раз. Похожий на:

Count(*) > 5, который я бы использовал в SQL.


person Rolando    schedule 27.12.2018    source источник
comment
$log имеет свойство .count, которое вы можете проверить. If ($log.count -gt 5){"whatever"}   -  person    schedule 27.12.2018
comment
Это сработало идеально. спасибо!   -  person Rolando    schedule 27.12.2018


Ответы (1)


Я хотел бы упомянуть альтернативу Get-EventLog: Get-WinEvent

Обычно он имеет гораздо лучшую производительность как локально, так и по сети, он может выполнять фильтрацию на стороне сервера с помощью -FilterHashTable перед отправкой результатов. Это может пригодиться, поскольку журналы Active Directory иногда могут быть довольно большими.

Поскольку вас интересует только, есть ли > 5 результатов или нет, мы также можем ускорить его, прервав работу, когда мы нашли 6 результатов, используя -MaxEvents, а затем просто проверим, нашли ли мы 6 событий или нет.

$maxEvents = 6
$filterHashtable = @{
    LogName   = 'Security'
    Id        = 4625
    StartTime = (Get-Date).AddDays(-60)
}

$log = Get-WinEvent -FilterHashtable $filterHashtable -MaxEvents $maxEvents
if ($log.Count -ge $maxEvents) {
    #your code here

Для удобочитаемости я предпочитаю иметь хэш-таблицу в переменной, но ее также можно записать как встроенную, с ; в качестве разделителя для пар ключ-значение:

Get-WinEvent -FilterHashtable @{ LogName = 'Security'; Id = ... }
person tomasmu    schedule 27.12.2018
comment
эй извините за поздний ответ, спасибо за обновление. Это тоже помогло. Причина, по которой я использовал Get-EventLog, заключается в том, что когда я пытаюсь использовать Get-WinEvent на серверах 2003 и 2008 годов, отличных от R2, у меня это не получается. Когда я запустил вашу команду Get-WinEvent, она отлично работала на наших серверах 2012-2016 годов. Спасибо еще раз. - person Rolando; 10.01.2019