我正在使用:
"%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中使用。
答案 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 = ... }