powershell - 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。
解决方案
我想提一下 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 = ... }
推荐阅读
- signalr - 这是否可以在信号 R 中将消息从客户端广播到服务器端?
- python - Python:批量读取并发送 json
- c# - 如何在与数据库的连接中使用 IList
- c# - 如何在硒测试c#中实现while循环
- python - list_display 未在 ModelAdmin Django 中显示 email_verified 字段
- xml - 来自 sql 的 xml 元素
- jackson - 无法从 START_ARRAY 令牌中反序列化 java.util.LinkedHashMap 的实例
- android - moto g6(不是 moto G6 plus)是否支持谷歌 ARCore?
- sql - SQL Server Always Encrypted - 最大参数数
- javascript - 将所有图像文件从 node.js 发送到前端