在工作中,我们有越来越多关于事件日志高使用率的警报(主要在安全日志上)。 为了解决这个问题,我们编写了一个自动复制,压缩和清除事件日志的脚本,并将其添加为计划任务。
到目前为止一直很好,它在许多服务器上都很好用。
但是,当日志最大文件大小设置为2097152 kB或更高时,该函数返回一个负值(很可能是因为它将其作为字节返回,因此它会超出范围)。
提取失败的代码如下:
Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate, (Backup, Security)}!\\" & strServer & "\root\cimv2")
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()
函数的限制?
答案 0 :(得分:0)
作为documented,MaxFileSize
属性是无符号的32位整数值:
<强> MAXFILESIZE 强>
数据类型: uint32
访问类型:读/写
但是,VBScript无法识别无符号数据类型,因此该值被误解。您需要自己更正,例如像这样:
Function FixUInt32(val)
If val >= 0 Then
FixUInt32 = val
Else
FixUInt32 = 4294967296 + val
End If
End Function
请注意,再次记录在案,可能会记录这么大的日志,但不建议这样做:
虽然事件日志的大小可以大到4千兆字节,但实际上它们应限制在不超过300兆字节。由于日志中包含的事件数量以及事件日志未针对数据检索进行优化,因此大于此的事件日志可能难以分析。