PowerShell » Gotowce

Pobieranie uptime systemu

  • 2007-09-08 11:33
  • 2 komentarze
  • 1715 odsłon
  • Oceń ten tekst jako pierwszy
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.

2 komentarze

maly186 2007-07-24 11:33

Dziwne... Wydawało mi się, że dodałem do Gotowców, ale cóż... Brak wprawy. Następnym razem się poprawie

Ktos 2007-07-24 10:55

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 ;-)