如果超过5次,则添加powershell get-eventlog

时间:2018-12-27 15:51:29

标签: powershell powershell-v2.0 eventlog-source get-eventlog

我正在使用:

"%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中使用。

1 个答案:

答案 0 :(得分:2)

我想提及Get-EventLog的替代方法:Get-WinEvent

它通常在本地和网络上都有更好的性能,它可以在发送结果之前使用-FilterHashTable进行服务器端过滤。由于Active Directory日志有时可能很大,因此可以派上用场。

由于您只对结果是否大于5感兴趣,因此我们也可以使用-MaxEvents通过在发现6个结果时及早中断来加快速度,然后检查是否发现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 = ... }