是否有办法可以知道服务器有没有重启
转载
MvdM。我们假设您正在执行一个任务,在这个任务结束后计算机将会重启。不用说,您想知道:“那好,服务器有没有重启?”如何知道服务器是否已经重启呢?
最简单的办法就是检查系统运行时间,并检查系统运行了多长时间。那假如您的过程在午夜运行,而您想在第二天早上 8 点上班时知道计算机有没有重启呢?好吧,如果计算机重启了,那么系统运行时间就应该在 8 个小时左右。如果系统运行时间在 8 个小时左右,那么计算机就可能重启了;如果系统运行时间比 8 小时稍微长点,那么计算机就可能没有 重启。
那么,如何判断系统运行时间呢?这很简单:使用 WMI class Win32_OperatingSystem 并检查 LastBootupTime 属性的值就可以了。当然,这个方法存在两个小问题。首先,LastBootupTime 属性会告诉您计算机何时重启,但它不会告诉您重启了多长时间。其次,与所有 WMI 时间属性一样,LastBootupTime 也是以 UTC 格式报告,就是说您最后得到的日期可能类似如下:200409070130.000000+480. 咳。
不过这也没问题;我们可以使用脚本来将 UTC 日期转换为标准时间格式,然后使用 VBScript 的 DateDiff 函数来将当前时间减去最后一次启动的时间,这样您就可以知道计算机重启多长时间了。以下就是执行上述任务的脚本:
strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOS in colOperatingSystems
dtmBootup = objOS.LastBootUpTime
dtmLastBootupTime = WMIDateStringToDate(dtmBootup)
dtmSystemUptime = DateDiff("h", dtmLastBootUpTime, Now)
Wscript.Echo dtmSystemUptime
Next
Function WMIDateStringToDate(dtmBootup)
WMIDateStringToDate = CDate(Mid(dtmBootup, 5, 2) & "/" & _
Mid(dtmBootup, 7, 2) & "/" & Left(dtmBootup, 4) _
& " " & Mid (dtmBootup, 9, 2) & ":" & _
Mid(dtmBootup, 11, 2) & ":" & Mid(dtmBootup, _
13, 2))
End Function
请注意,这里有两点比较重要。首先,我们使用 WMIDateStringToDate 函数来将 UTC 日期转换为标准时间值。我们不打算在这里解释所有代码,但我们所作的就是分离出 UTC 时间值,然后以标准格式重新排列它们。例如,对于 UTC 日期 200409070130.000000+480 来说,前四位数字表示年份。因此,我们的函数将取出前四位数字——Left(dtmBootup, 4),并将前四位数字分配给标准日期的年份部分。然后,我们使用相同方法分配其余的时间值。