Firmy pracujące 24 godziny na dobę, oczekują, że ich systemy są zawsze dostępne, a użytkownicy, niezależnie od lokalizacji posiadają dostęp do danych. W całej tej układance najważniejszym elementem jest serwer. Jego niezawodna i niezakłócona praca jest kluczem do osiągnięcia wymaganej niezawodności. Dlatego zespoły administratorów dwoją się i troją, aby skutecznie monitorować wydajność serwerów. Jedną z istotnych metryk, na które warto zwrócić uwagę jest Uptime. Ale dlaczego to jest aż takie ważne i jak można ją monitorować?
Czym jest Uptime?
Uptime – czyli czas nieprzerwanej pracy komputera, a mówiąc dokładniej czas od ostatniego uruchomienia systemu. Czasami nazywany również czasem dostępności usług, które oferuje dana maszyna. Pojęcie używane głównie w przypadku serwerów pracujących nieprzerwanie (24h/7), dostępnych w sieci lokalnej lub Internecie. Uptime jest często wykorzystywany jako miara stabilności i niezawodności systemu operacyjnego. W tym wypadku czas nieprzerwanej pracy jest traktowany jako ilość czasu, jaki system komputerowy może pracować bez nadzoru i opieki, a mimo to nie dojdzie do awarii czy potrzeby ponownego uruchomienia. Terminem odwrotnym jest downtime, czyli czas, w którym system komputerowy nie pracuje, zwykle w wyniku awarii sprzętowej, lub mimo pracy nie oferuje usług – awaria programowa.
Czy trzeba się tym przejmować?
Czas to pieniądz, zatem patrząc od strony biznesowej, im czas nieprzerwanej pracy serwerów jest dłuższy tym większy jest wskaźnik niezawodności. Im niezawodność większa tym Twoja firma mniej traci na przestojach. A jak wynika z raportu ITIC są to całkiem pokaźne sumy.
In 2021 a price tag of $100,000 (USD) for one hour of downtime for a single server is extremely conservative for all but the smallest micro SMBs with one to 25 employees. It equates to $1,670 per minute/per server. Hourly cost of downtime calculated at $300,000 equals about $5,000 per server/per minute. The cost of a more severe or protracted hourly outage that a business estimated at $1 million (USD) is the equivalent of $16,700 per server/per minute.
Patrząc z kolei od strony administratora, im dłuższy czas nieprzerwanej pracy tym serwer staje się potencjalnie bardziej zawodny, chociażby w wyniku braku aktualizacji systemu. Dlatego warto trzymać rękę na pulsie i monitorować ten wskaźnik w poszczególnych serwerach, a także dbać o odpowiednią obsługę i konserwację maszyn.
Jak to sprawdzić?
Chociaż dostępnych jest cała masa rozwiązań do monitorowania i raportowania wszystkich możliwych wskaźników serwera, to warto wiedzieć, jak to zrobić samemu. Z pomocą przychodzi oczywiście PowerShell, a jak wiadomo, jeżeli jest PowerShell to musi być kilka różnych wariantów. Poniżej zamieszczam 5 najpopularniejszych metod:
1. Get-Uptime
Jeżeli posiadasz najnowszą wersję PowerShella (mowa oczywiście o wersji 7+) to w zasadzie wystarczy jeden cmdlet wykonany w konsoli – Get-UpTime. Polecenie wprowadzone zostało w wersji 6.0 i wyświetla czas od ostatniego uruchomienia systemu.
PS C:\Users\Admin> Get-Uptime
Days : 4
Hours : 12
Minutes : 57
Seconds : 41
Milliseconds : 0
Ticks : 3922610000000
TotalDays : 4.54005787037037
TotalHours : 108.961388888889
TotalMinutes : 6537.68333333333
TotalSeconds : 392261
TotalMilliseconds : 392261000
Dodając parametr -Since
, będziesz w stanie określić dokładny czas uruchomienia systemu.
PS C:\Users\Admin> Get-Uptime -Since
09 May 2025 08:54:12
2. Get-ComputerInfo
Nie martw się jeżeli nie posiadasz PowerShella 7, do sprawdzenia Uptime wystarczy Windows PowerShell i cmdlet Get-ComputerInfo, który dołączył do rodziny poleceń w wersji 5.1. Polecenie to zwraca całą masę różnych informacji o komputerze. Wliczając w to min. dane o systemie operacyjnym czy sprzęcie. Całość prezentuje się następująco:
PS C:\Users\Admin> Get-ComputerInfo | Select-Object OsUptime
OsUptime
--------
4.13:12:47.5714104
3. Zapytanie CIM
Common Information Model (CIM) to standard opisujący strukturę i zachowanie zarządzanych zasobów, takich jak pamięć masowa, sieć lub komponenty oprogramowania. W zapytaniu wykorzystam klasę o nazwie Win32_OperatingSystem. Sama klasa posiada wiele właściwości, jednak w tym wypadku interesuje nas tylko LastBootUpTime. Wartość tej właściwości informuje, kiedy nastąpiło ostatnie uruchomienie komputera.
PS C:\Users\Admin> (Get-CimInstance Win32_OperatingSystem).LastBootUpTime
09 May 2025 08:55:27
Aby całość miała ręce i nogi warto dołożyć aktualną datę i odjąć datę uruchomienia:
PS C:\Users\Admin> (Get-Date)-(Get-CimInstance Win32_OperatingSystem).LastBootUpTime
Days : 4
Hours : 13
Minutes : 15
Seconds : 44
Milliseconds : 972
Ticks : 3933449727237
TotalDays : 4.55260385096875
TotalHours : 109.26249242325
TotalMinutes : 6555.749545395
TotalSeconds : 393344.9727237
TotalMilliseconds : 393344972.7237
4. Dziennik zdarzeń
Ciekawym rozwiązaniem może być również wykorzystanie dziennika zdarzeń systemu Windows. W PowerShellu dostęp do niego uzyskasz za pomocą cmdletu Get-EventLog lub Get-WinEvent. Oba polecenia zbierają informacje z dzienników zdarzeń i plików dziennika śledzenia zdarzeń znajdujących się na komputerach lokalnych i zdalnych. Oczywiście nie musisz przeglądać całego dziennika, wystarczy, że ograniczysz się do konkretnych zdarzeń. Przykładowo zdarzenie o numerze identyfikacyjnym 6005 generowane jest przy starcie usługi dziennika zdarzeń. Korzystając z tego faktu, wystarczy odszukać wpis, który posiada wartość 6005 dla odpowiedniej właściwości. Następnie odfiltrować jedynie ostatni i wyświetlić czas wygenerowania. Poniżej przykład z wykorzystaniem Get-WinEvent.
PS C:\Users\Admin> (Get-WinEvent -FilterHashtable @{LogName='System'; ID='6005'} -MaxEvents 1).TimeCreated
09 May 2025 08:55:35
Aby wyświetlony został Uptime, uzyskany czas należy odjąć od aktualnej daty.
PS C:\Users\Admin> (Get-Date)-(Get-WinEvent -FilterHashtable @{LogName='System'; ID='6005'} -MaxEvents 1).TimeCreated
Days : 4
Hours : 13
Minutes : 20
Seconds : 1
Milliseconds : 640
Ticks : 3936016405554
TotalDays : 4.55557454346528
TotalHours : 109.333789043167
TotalMinutes : 6560.02734259
TotalSeconds : 393601.6405554
TotalMilliseconds : 393601640.5554
5. Gotowe skrypty i funkcje (w przypadku Windows PowerShell)
Ostatnim rozwiązaniem jest skorzystanie z gotowego rozwiązania. Mam tutaj na myśli istniejący skrypt, funkcję lub moduł. W tym wypadku najlepiej skorzystać ze strony PowerShell Gallery lub cmdletów Find-Command i Find-Module. Zobaczmy, jak by to miało wyglądać w przypadku wykorzystania tego pierwszego polecenia:
PS C:\Users\Admin> Find-Command -Name Get-Uptime
Name Version ModuleName Repository
---- ------- ---------- ----------
Get-Uptime 3.3.2 Pscx PSGallery
Get-Uptime 1.0.2 windows-screenfetch PSGallery
Get-Uptime 1.7 GetUptime PSGallery
Get-Uptime 4.0.1.1 WintellectPowerShell PSGallery
Get-UpTime 2.13.2 CPolydorou.General PSGallery
Get-Uptime 0.1.2.1 Uptime PSGallery
Get-UpTime 2.4 CISPowerShell PSGallery
Get-Uptime 1.3.6 MrAToolbox PSGallery
Get-Uptime 1.1 SUBnet192.Toolset PSGallery
Get-UpTime 1.0.1 AdministrativeAddOn PSGallery
Get-Uptime 4.0.3.10 SourceOne_POSH PSGallery
Get-Uptime 1.0.0.2 InfrastructureFunctionsModule PSGallery
Get-Uptime 2.0 finnget PSGallery
Get-Uptime 0.1.1 pewtools PSGallery
Jak widzisz, w wyniku otrzymałem kilkanaście poleceń cechujących się różną wersją i modułem. Ich wspólną cechą jest przynależność do jednego repozytorium PSGallery. W ramach małego pokazu zainstaluję moduł pewtools.
PS C:\Users\Admin> Install-Module -Name pewtools Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): Y
Następnie wykorzystuję jedną z jego funkcji, dzięki której otrzymam czas nieprzerwanej pracy dla lokalnej maszyny.
PS C:\Users\Admin> Get-Uptime
Days : 5
Hours : 12
Minutes : 10
Seconds : 40
Readable : 5d, 12h, 10m, 40s
Jak możesz zauważyć wszystko przebiegło zgodnie z planem. Co więcej moduł pewtools ma jeszcze kilka innych ciekawych cmdletów, ale to zostawiam juz Tobie do sprawdzenia.
Podsumowanie
W świecie gdzie wszystko i wszyscy są online, czas nieprzerwanej pracy komputera jest jednym z kluczowych parametrów wartych monitorowania. Dzięki konsoli PowerShell jesteś w stanie szybko sprawdzić i porównać jak UpTime wygląda w twoim środowisku.
To wszystko na dziś!
Jeśli masz ciekawe spostrzeżenia lub doświadczenia w tym temacie – koniecznie podziel się nimi w komentarzach.
A jeśli moje materiały są dla Ciebie pomocne, możesz postawić mi wirtualną kawę.
Dzięki za wsparcie!


Adam Pietrzak
Trener IT | Autor szkoleń | Entuzjasta PowerShellaAdministrator systemów i sieci wsparcia działań wojskowych z ponad 10-letnim doświadczeniem. Praktyk w dziedzinie bezpieczeństwa systemu Windows, automatyzacji zadań (PowerShell) oraz rozwiązań chmurowych. Trener i twórca materiałów edukacyjnych (szkolenia, warsztaty, artykuły, podręczniki). Pasjonat dzielenia się wiedzą i wspierania początkujących administratorów IT. Prywatnie – amator aktywnego wypoczynku i rodzinnych podróży.