get-eventlog powershell добавить, если более 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 раз. Похожий на:

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

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 = ... }
Другие вопросы по тегам