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 = ... }