Windows - Számítógép bekapcsolása óta eltelt idő

forráskód letöltése
Főleg szervereknél jelent érdekes statisztikai adatot, hogy mikor lett utoljára bekapcsolva a számítógép és azóta mennyi idő telt el. A statisztikán kívül a rendszergazda tudomást szerezhet az esetleges újraindításokról, amikor a rendszer visszaáll eredeti állapotába és semmi nem utal rá, hogy az éjszaka közepén bizony történt egy újraindítás. Alább készítünk egy szkriptet, mely kiírja, hogy mikor lett bekapcsolva a gép és azóta mennyi idő telt el (óra, perc).
Cikkünkhöz mellékeltük az alábbi szkriptet "Uptime.vbs" néven. Futtatás után kiírja a számítógép bekapcsolásának időpontját és az azóta eltelt időt.
Első lépésben meghatározzuk, hogy mely számítógép bekapcsolása óta eltelt időt fogjuk megmérni. A pont (.) a helyi gépet jelenti, ha a hálózat egy másik számítógépének nevét vagy IP címét adjuk meg, ügyeljünk rá, hogy ott is jogosultsággal kell rendelkeznünk az adatok kiolvasásához.
strComputer = "."
Kapcsolatot kell teremtenünk az adott számítógép WMI (Windows Management Instrumentation) szolgáltatásának alapértelmezett \root\cimv2 névterével a "winmgmts" interfészen keresztül.
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
A WMI-tól tulajdonképpen egyetlen adatra van szükség, a gép bekapcsolásának időpontjára. Ezt a "Win32_OperatingSystem" osztály tárolja.
Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
Egy ciklussal feldolgozzuk a "colOperatingSystems"-ben visszakapott objektumokat.
For Each objOS in colOperatingSystems
A számítógép bekapcsolásának (pontosabban az operációs rendszer elindulásának) időpontját a "LastBootUpTime" tulajdonság tárolja.
    dtmBootup = objOS.LastBootUpTime
A kapott dátumformátumot át kell alakítanunk hétköznapi formára, különben valami hasonlót fogunk látni: "20030124076010,984375+060", az alábbi "WMIDateStringToDate" függvényt használjuk erre.
    dtmLastBootupTime = WMIDateStringToDate(dtmBootup)
Kiszámoljuk, hogy hány óra telt el a bekapcsolás és az aktuális (now) időpont között, "DateDiff" függvény két dátum közötti különbséget adja vissza, most órában ("h").
    dtmSystemUptimeHour = DateDiff("h", dtmLastBootUpTime, Now) - 1
Itt pedig percben ("n" és nem "m").
    dtmSystemUptimeMinutes = DateDiff("n", dtmLastBootUpTime, Now) - (dtmSystemUptimeHour  * 60 )
A két adatból előállítjuk a megjelenítendő sztringet.
dtmSystemUptime = dtmSystemUptimeHour & " óra " & dtmSystemUptimeMinutes  & " perc "
Kiíratjuk a bekapcsolás idejét ("dtmSystemUptimeHour") és az azóta eltelt időt ("dtmSystemUptimeMinutes").
  Text="Számítógép bekapcsolásának időpontja: " & dtmLastBootupTime & chr(13) & chr(10)
  Text=Text & "Azóta eltelt idő: " & dtmSystemUptime 
 Wscript.Echo Text
Zárjuk a ciklust.
Next
A szkript végére került a dátumkonverziós függvény.
Function WMIDateStringToDate(dtmBootup)
A "CDate" függvény egy sztringet alakít át dátummá. Látható, hogy a fenti dátumérték ("20030124076010,984375+060") első karakterei tartalmazzák a dátumot, majd utána az időt, ebből a "Mid" függvénnyel kivágjuk az évet:
    WMIDateStringToDate = CDate(Mid(dtmBootup, 5, 2) & "/" & _
Majd a hónapot:
         Mid(dtmBootup, 7, 2) & "/" & Left(dtmBootup, 4) _
A napot:
         & " " & Mid (dtmBootup, 9, 2) & ":" & _
És az időt:
         Mid(dtmBootup, 11, 2) & ":" & Mid(dtmBootup, _
         13, 2))
End Function