在工作中,我们收到了越来越多关于事件日志高使用率的警报(主要在安全日志上)。为了解决这个问题,我们编写了一个脚本,可以自动复制、压缩和清除事件日志,并将其添加为计划任务。
到目前为止还不错,它在许多服务器上都运行得很好。
但是,当日志最大文件大小设置为2097152时;kB或更高,函数返回一个负值(很可能是因为它以字节形式返回而超出了范围)。
失败代码的提取如下:
Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate, (Backup, Security)}!\" & strServer & "rootcimv2")
For Each Item in oWMI.ExecQuery("SELECT * FROM Win32_NTEventLogFile WHERE LogFileName='Security'")
Report = Report & vbNewLine & " " & Item.LogFileName & " log" & vbNewLine & _
" Maximum size: " & (Item.MaxFileSize/1024) & " KB" & vbNewLine & _
" Current size: " & (Item.FileSize/1024) & " KB" & vbNewLine & _
" Usage percentage: " & _
Round(((Item.FileSize * 100) / Item.MaxFileSize),2) & vbewLine
是否有任何变通方法或任何方法来编辑代码,使其支持2097152的日志最大文件大小;kB及以上,还是GetObject()
函数的限制?
如文档所述,MaxFileSize
属性是一个无符号的32位整数值:
最大文件大小
数据类型:uint32
访问类型:读/写
但是,VBScript无法识别未签名的数据类型,因此该值会被误解。你需要自己纠正,例如:
Function FixUInt32(val)
If val >= 0 Then
FixUInt32 = val
Else
FixUInt32 = 4294967296 + val
End If
End Function
注意,正如文件所述,有这么大的日志是可能的,但不建议使用:
尽管事件日志的大小可以大到4GB,但在实践中,它们应该限制在不超过300MB。由于日志中包含的事件数量以及事件日志未针对数据检索进行优化,因此很难分析大于该值的事件日志。