首页 > 解决方案 > 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 次则写输出。如同:

我将在 SQL 中使用的 Count(*) > 5。

标签: powershellpowershell-2.0eventlog-sourceget-eventlog

解决方案


我想提一下 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 = ... }

推荐阅读