Cum aflam uptime-ul unui sistem din Powershell

By Andrei Ungureanu - Last updated: Wednesday, August 21, 2013 - Save & Share - One Comment

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

image

Problema este formatul. Asa ca va trebui sa convertim.

[System.Management.ManagementDateTimeconverter]::ToDateTime((Get-WmiObject -Class Win32_OperatingSystem).LastBootUpTime)

image

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)

image

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.

Posted in Scripting • Tags: , Top Of Page

One Response to “Cum aflam uptime-ul unui sistem din Powershell”

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}}

Write a comment