get-eventlog powershell добавить, если более 5 раз - PullRequest
0 голосов
/ 27 декабря 2018

Я использую:

"%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 Ответ

0 голосов
/ 27 декабря 2018

Я хотел бы упомянуть альтернативу 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 = ... }
...