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

时间:2016-01-05 14:10:03

标签: windows vbscript automation event-log windows-server

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

到目前为止一直很好,它在许多服务器上都很好用。

但是,当日志最大文件大小设置为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()函数的限制?

1 个答案:

答案 0 :(得分:0)

作为documentedMaxFileSize属性是无符号的32位整数值:

  

<强> MAXFILESIZE

     

数据类型: uint32
  访问类型:读/写

但是,VBScript无法识别无符号数据类型,因此该值被误解。您需要自己更正,例如像这样:

Function FixUInt32(val)
  If val >= 0 Then
    FixUInt32 = val
  Else
    FixUInt32 = 4294967296 + val
  End If
End Function

请注意,再次记录在案,可能会记录这么大的日志,但不建议这样做:

  

虽然事件日志的大小可以大到4千兆字节,但实际上它们应限制在不超过300兆字节。由于日志中包含的事件数量以及事件日志未针对数据检索进行优化,因此大于此的事件日志可能难以分析。