输出正常运行时间来归档和累积

时间:2014-01-14 00:08:03

标签: windows vbscript uptime

嘿伙计们我正在尝试轻松获取网络机器的累积正常运行时间数据。

基本上我们需要保存到文件中的正常运行时间总和,所以在季度结束时我们可以报告这个。

我可以轻松地在运行脚本时获得正常运行时间,但不确定如何使用每天节省机器正常运行时间的时间,以便我可以向其报告。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果您想通过计算机本身监控的正常运行时间来执行此操作,则需要(或多或少)持续更新日志,因为计数器在系统崩溃或重新启动后会重置,您将失去正常运行时间之间的正常运行时间信息。上次日志写入和崩溃/重启。更好的方法是实施系统监控解决方案(Nagios,Zabbix,WhatsUp,SCOM,......)。这些工具可以持续跟踪系统的正常运行时间,并且已经提供了可以使用的报告。

如果您仍想使用“本地脚本”路线,则每隔5分钟运行以下内容作为计划任务可能有效:

Set fso = CreateObject("Scripting.FileSystemObject")
Set wmi = GetObject("winmgmts://./root/cimv2")
Set re  = New RegExp

logfile = "C:\path\to\uptime.log"

uptimes = fso.OpenTextFile(logfile, 1, True).ReadAll

'extract last uptime from log
re.Pattern = "(\d+)\s*$"
For m In re.Execute(uptimes)
  lastUptime = CLng(m.SubMatches(0))
Next

'get current uptime
qry = "SELECT * FROM Win32_PerfFormattedData_PerfOS_System"
For Each v In wmi.ExecQuery(qry)
  currentUptime = CLng(v.SystemUpTime)
Next

Set f = fso.OpenTextFile(logfile, 2)
If IsEmpty(lastUptime) Or lastUptime >= currentUptime Then
  'append current uptime if the last uptime was greater or equal to than the
  'current uptime (=> a crash or reboot occurred) or no uptime was logged before
  f.WriteLine uptimes & currentUptime
Else
  'update last uptime otherwise
  f.WriteLine re.Replace(uptimes, currentUptime)
End If
f.Close