Pobieranie uptime systemu
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:
Uptime jest przechowywany we właściwości LastBootupTime tej klasy w formie łańcucha znaków o formacie
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
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:
Teraz w zmiennej $uptime mamy uptime systemu:
Ż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ę
Inaczej skrypt nie zwróci wartości.
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.
2 komentarze
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:
Write-Host "$($uptime.days)" -NoNewLine -ForeGroundColor Green
Write-Host " days, " -NoNewLine
Write-Host "$($uptime.Hours)" -NoNewLine -ForeGroundColor Green
Write-Host " hours, " -NoNewLine
Write-Host "$($uptime.Minutes)" -NoNewLine -ForeGroundColor Green
Write-Host " minutes, " -NoNewLine
Write-Host "$($uptime.seconds)" -NoNewLine -ForeGroundColor Green
Write-Host " seconds"
PS. Umieściłeś tekst w głównej kategorii, przeniosłem do PowerShellowych gotowców. I zachęcam do pisania dalej ;-)
Dziwne... Wydawało mi się, że dodałem do Gotowców, ale cóż... Brak wprawy. Następnym razem się poprawie