Cum aflam uptime-ul unui sistem din Powershell
Motivele pentru care avem nevoie de uptime-ul unui sistem sunt irelevante aici, important e cum il aflam. Din cautarile mele pe net am gasit tot felul de metode destul de incurcate. Asa ca m-am gandit sa vin cu o varianta mai simpla.
Prima oara trebuie sa aflam cand a fost bootat sistemul.
(Get-WmiObject -Class Win32_OperatingSystem).LastBootUpTime
Problema este formatul. Asa ca va trebui sa convertim.
[System.Management.ManagementDateTimeconverter]::ToDateTime((Get-WmiObject -Class Win32_OperatingSystem).LastBootUpTime)
Iar pentru a afla uptime-ul va trebui sa scadem valoarea aflata din data curenta. Iar data curenta o obtinem cu Get-Date.
(Get-Date) – [System.Management.ManagementDateTimeconverter]::ToDateTime((Get-WmiObject -Class Win32_OperatingSystem).LastBootUpTime)
Iar Get-WmiObject poate primi ca parametru si numele unui computer remote deci se poate afla uptime-ul remote.
Banuiesc ca in scurt timp o sa existe nativ si un cmdlet pentru asa ceva dar pana atunci tot WMI e baza.
Comment from Ciprian Lozonschi
Time August 22, 2013 at 12:34 am
Treaba asta cu convertirea timpului si scaderea din Get-Date e buna si frumoasa daca faci asta cand esti pe server, local sau daca serverul remote e in acelasi time zone cu TS de unde interoghezi asta.
Dar daca de exemplu eu sunt pe (UTC-05:00) Eastern Standard Time (US & Canada) si interoghez un server din (UTC-08:00) Pacific Standard Time (US & Canada) o sa-mi dea ca LastBootUpTime in cazul de mai sus cu o diferenta de 3 ore.
Caz concret: in event log era ca serverul pornise la 5 AM dar cu LastBootUpTime imi dadea ca se intamplase la 8 AM.
Rezolvarea e sa iei valorea din LastBootUpTime si sa o convertesti
Get-WmiObject -Class Win32_OperatingSystem -ComputerName $Computer | Select-Object @{Name=”Server”;Expression={$_.__SERVER}},LastBootUpTime, @{name=”LastBootTime(LocalServerTime)”;expression={“{0}.{1}.{2} {3}:{4}:{5}” -f ($_.LastBootUpTime).Substring(6,2),($_.LastBootUpTime).Substring(4,2),($_.LastBootUpTime).Substring(0,4),($_.LastBootUpTime).Substring(8,2),($_.LastBootUpTime).Substring(10,2),($_.LastBootUpTime).Substring(12,2)}},@{name=”Uptime”;expression={$uptime = (Get-Date) – ($_.ConvertToDateTime($_.LastBootUpTime)); “{0}D:{1}H:{2}M” -f $uptime.Days,$uptime.Hours,$uptime.Minutes}}