【问题标题】:powershell get-eventlog add if more than 5 timespowershell get-eventlog 如果超过 5 次添加
【发布时间】:2019-05-25 15:12:43
【问题描述】:

我正在使用:

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

【问题讨论】:

  • $log 有一个 .count 可以检查的属性。 If ($log.count -gt 5){"whatever"}
  • 这很完美。谢谢!

标签: powershell powershell-2.0 eventlog-source get-eventlog


【解决方案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 = ... }

【讨论】:

  • 您好,很抱歉回复晚了,感谢您的更新。这也有帮助。我使用 Get-EventLog 的原因是当我尝试在 2003 和 2008 非 R2 服务器上使用 Get-WinEvent 时,它会失败。当我运行您的 Get-WinEvent 命令时,它在我们的 2012-2016 服务器上运行良好。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 2019-08-09
  • 2017-03-12
相关资源
最近更新 更多