用于备份、压缩和清除事件日志的脚本返回负文件大小值



在工作中,我们收到了越来越多关于事件日志高使用率的警报(主要在安全日志上)。为了解决这个问题,我们编写了一个脚本,可以自动复制、压缩和清除事件日志,并将其添加为计划任务。

到目前为止还不错,它在许多服务器上都运行得很好。

但是,当日志最大文件大小设置为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。由于日志中包含的事件数量以及事件日志未针对数据检索进行优化,因此很难分析大于该值的事件日志。

最新更新