Pobieranie uptime systemu
maly186
Uptime to czas jaki minął od uruchomienia systemu. W systemie Windows klasa WMI Win32_OperatingSystem przechowuje we właściwości LastBootUpTime czas ostatniego uruchomienia systemu.
Zacznijmy od pobrania tej klasy WMI:
PS scripts:\> $wmi=get-wmiobject -Class Win32_OperatingSystem
Uptime jest przechowywany we właściwości LastBootupTime tej klasy w formie łańcucha znaków o formacie yyyymmddhhnnss
gdzie
yyyy - rok
mm - miesiąc
dd - dzien
hh - godzina
nn - minuta
ss - sekunda
Teraz trzeba wyciągnąć z tego łańcucha poszczególne fragmenty
PS scripts:\> $LastBootUp=$wmi.LastBootUpTime
PS scripts:\> $year=$LastBootUp.substring(0,4)
PS scripts:\> $month=$LastBootUp.substring(4,2)
PS scripts:\> $day=$LastBootUp.substring(6,2)
PS scripts:\>
PS scripts:\> $hour=$LastBootUp.substring(8,2)
PS scripts:\> $minute=$LastBootUp.substring(10,2)
PS scripts:\> $second=$LastBootUp.substring(12,2)
W zmiennych $year, $month, $day, $hour, $minute, $second znajdują sie poszczególne składowe czasu.
Ale to nadal czas uruchomienia a nie uptime. Jak policzyć różnicę czasu między czasem aktualnym a czasem uruchomienia? Tu z pomocą przychodzi nam klasa System.DateTime. Tworzymy obiekt tej klasy i odejmujemy od czasu aktualnego:
PS scripts:\> $reboottime=new-object System.DateTime($year,$month,$day,$hour,$minute,$second)
PS scripts:\> $uptime=[System.DateTime]::Now.Subtract($reboottime)
Teraz w zmiennej $uptime mamy uptime systemu:
PS scripts:\> $uptime
Days : 0
Hours : 3
Minutes : 0
Seconds : 45
Milliseconds : 532
Ticks : 108455322038
TotalDays : 0,125526993099537
TotalHours : 3,01264783438889
TotalMinutes : 180,758870063333
TotalSeconds : 10845,5322038
TotalMilliseconds : 10845532,2038
PS scripts:\>
Żeby było wygodniej możemy umieścić cały kod w skrypcie, tak by potem uruchamiać go jedną linijką. Ważne jest by dodać na samym końcu skryptu linijkę
return $uptime
Inaczej skrypt nie zwróci wartości.
Dziwne... Wydawało mi się, że dodałem do Gotowców, ale cóż... Brak wprawy. Następnym razem się poprawie
Oczywiście zamiast wyświetlać po prostu zmienną $uptime można to przerobić by pokazywało w "ładniejszej" dla człowieka formie, na przykład ja stosuję coś takiego:
PS. Umieściłeś tekst w głównej kategorii, przeniosłem do PowerShellowych gotowców. I zachęcam do pisania dalej ;-)