Skąd mam wiedzieć, kiedy ostatni raz uruchomiono system Windows?
Skąd mam wiedzieć, kiedy ostatni raz uruchomiono system Windows 7?
Wolę rozwiązanie, które nie wymaga przeszukiwania dziennika zdarzeń, ale coś w rodzaju komend wmic
lub może cmd
.
Skąd mam wiedzieć, kiedy ostatni raz uruchomiono system Windows 7?
Wolę rozwiązanie, które nie wymaga przeszukiwania dziennika zdarzeń, ale coś w rodzaju komend wmic
lub może cmd
.
Polecenie systeminfo
jest prawie tym, czego potrzebujesz. Na angielskim Windows 7 możesz również zrobić:
systeminfo | find /i "Boot Time"
Lub z pomocą WMIC :
wmic os get lastbootuptime
Główna różnica między Windows 7 i Windows XP, że w Windows 7 Microsoft może pokazać tylko ostatni czas uruchamiania.
Również w Task Manager:
Innym sposobem jest użycie następującej linii poleceń, która działa zarówno w Windows XP jak i Windows 7:
net statistics workstation
Ma tę zaletę, że jest szybsza od alternatywy systeminfo
podczas formatowania daty (czego wmic
nie robi). Otrzymujesz również kilka innych informacji, które mogą być przydatne, jeśli rzeczywiście używasz tej komendy do debugowania komputera (ponieważ pytasz konkretnie o cmd
, zakładam, że nie robisz tego programowo).
Więcej informacji na temat komendy net statistics
możesz znaleźć tutaj: http://technet.microsoft.com/en-us/library/bb490714.aspx
Oto przykład wyniku (przy użyciu francuskiej kopii Windows 7 Pro SP1 x64, język użytkownika nie ma większego znaczenia dla linii poleceń):
(nazwa komputera jest celowo zamazana)
Więcej szczegółów na http://en. wikipedia.org/wiki/Uptime o dokładności przy określaniu czasu sprawności systemu.
Uważna uwaga : ta metoda określa kiedy komputer był ostatnio uruchamiany, a nie jego czas sprawności. Te 2 liczby będą inne, jeśli używasz sleep/hibernate.
To jest własność LastBootUpTime
klasy Win32_OperatingSystem
. Możesz użyć WMIC za pomocą tej komendy:
wmic os get lastbootuptime
lub jeśli używasz Powershella, możesz przekonwertować czas na coś bardziej czytelnego niż ten irytujący format WMI datetime:
Get-WmiObject -class Win32_OperatingSystem | Select-Object __SERVER,@{label='LastBootUpTime';expression={$_.ConvertToDateTime($_.LastBootUpTime)}}
Zauważ, że w późniejszych wersjach programu PowerShell, możesz również użyć Get-CimInstance, która automatycznie zwróci wartość jako datetime:
Get-CimInstance -Class Win32_OperatingSystem | Select-Object LastBootUpTime
Jedyną irytującą rzeczą jest to, że Get-CimInstance czasami zmienia nazwę niektórych pól systemowych z obiektów WMI, takich jak __SERVER tutaj. Musiałbyś użyć albo CSName
albo PSComputerName
, co wydaje się działać dla mnie.
Dla użytkowników Windows 10 tam…
Należy pamiętać, że jak zauważył Alex , polecenie /sleepstudy
nie zostało dodane do systemu Windows 8.1. /systempowerreport może zamiast tego działać.
Zauważ, że niektóre z tych innych odpowiedzi nigdy nie działały dla mnie, jak na przykład wyszukiwanie w event-logu zawsze brakowało niektórych wpisów. Odpowiedź @Florisza jest również prawidłowa w tym zakresie. Oto moje rozwiązanie:
W powłoce administratora cmd wykonaj następujące polecenie:
powercfg /sleepstudy /output sleepstudy.html
Następnie otwórz plik sleepstudy.html
w przeglądarce. Zostaniesz powitany niesamowicie zorganizowanymi statystykami dotyczącymi zamykania/rebootowania/stand-by/hibernacji z ostatnich trzech dni. (więc działaj okresowo jeśli potrzebujesz)
Przykładowe wyjście: (AFAIR, Showdown (Hybrid)
oznacza szybki start)
Jeszcze inny sposób w pliku wsadowym, aby uzyskać czas rozruchu z wmic, ale w postaci czytelnej dla człowieka :
for /f %%a in ('WMIC OS GET lastbootuptime ^| find "."') DO set DTS=%%a set BOOTTIME=%DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2% %DTS:~8,2%:%DTS:~10,2% echo DTS : %DTS% echo BOOTTIME :%BOOTTIME%
output :
DTS : 20170308073729.491206+060
BOOTTIME : 2017-03-08 07:37
Możesz użyć do tego PowerShell.
Get-WinEvent -LogName Microsoft-Windows-Diagnostics-Performance/Operational | Where { $_.Id -eq 200 }
To da Ci listę zarejestrowanych czasów wyłączenia.
Alternatywne polecenie, lepiej zoptymalizowane dla zdalnych połączeń:
Get-WinEvent -FilterHashtable @{LogName = "Microsoft-Windows-Diagnostics-Performance/Operational"; Id = 200; }
Przykładowe wyjście:
TimeCreated Id LevelDisplayName Message
----------- -- ---------------- -------
2017-01-28 18:25:46 200 Critical Windows has shutdown
2016-11-01 19:55:21 200 Error Windows has shutdown
2016-10-29 00:18:38 200 Critical Windows has shutdown
2016-10-26 23:16:55 200 Warning Windows has shutdown
2016-10-26 15:37:40 200 Warning Windows has shutdown
2016-10-26 02:18:24 200 Warning Windows has shutdown
2016-10-26 02:10:34 200 Warning Windows has shutdown
2016-10-26 02:04:01 200 Warning Windows has shutdown
2016-10-25 14:23:11 200 Warning Windows has shutdown
2016-10-25 13:07:46 200 Error Windows has shutdown
2016-10-25 00:18:12 200 Error Windows has shutdown
2016-10-19 13:16:39 200 Critical Windows has shutdown
Poniższe polecenie da Ci listę zalogowanych czasów startowych.
Get-WinEvent -LogName Microsoft-Windows-Diagnostics-Performance/Operational | Where { $_.Id -eq 100}
Polecenie alternatywne, lepiej zoptymalizowane dla połączeń zdalnych:
Get-WinEvent -FilterHashtable @{LogName = "Microsoft-Windows-Diagnostics-Performance/Operational"; Id = 100; }
Przykładowe wyjście:
TimeCreated Id LevelDisplayName Message
----------- -- ---------------- -------
2017-10-07 21:35:38 100 Critical Windows has started up
2017-01-28 18:25:48 100 Critical Windows has started up
2016-12-11 17:45:07 100 Critical Windows has started up
2016-11-16 13:26:52 100 Critical Windows has started up
2016-11-01 19:55:21 100 Critical Windows has started up
2016-10-29 00:18:39 100 Critical Windows has started up
2016-10-26 23:16:55 100 Error Windows has started up
2016-10-26 14:51:07 100 Error Windows has started up
2016-10-26 02:24:01 100 Error Windows has started up
2016-10-26 02:18:24 100 Critical Windows has started up
2016-10-26 02:10:34 100 Error Windows has started up
2016-10-26 02:04:01 100 Critical Windows has started up
2016-10-25 14:23:12 100 Error Windows has started up
2016-10-25 13:07:47 100 Error Windows has started up
2016-10-25 12:56:23 100 Error Windows has started up
2016-10-19 13:16:39 100 Critical Windows has started up
Przetestowałem to na PowerShell 5.1 i Windows 10.0.15063. Ale powinno to działać również na Windows 7, o ile masz co najmniej PowerShell 3.0. Zauważ, że musisz uruchomić go jako admin.
Pełną dokumentację dla tej komendy znajdziesz tutaj docs.microsoft.com
Aby dostać go w PowerShell:
Function Get-LastBoot {
if ($Host.Version.Major -lt 3) {
Get-WmiObject win32_operatingsystem | Select-Object CSname, @{n = 'LastBootUpTime'; e = {$_.ConverttoDateTime($_.lastbootuptime)}}
}
else {
Get-CimInstance -ClassName win32_operatingsystem | Select-Object CSname, LastBootUpTime
}
}
Oto wynik:
CSname LastBootUpTime
------ --------------
LAPTOP1 2018-09-07 08:57:02
Chcę dodać, że wszystkie te komendy naprawdę dają ci znaczniki czasu, kiedy ‘restart’ lub ‘reboot’ jest zrobiony. A nie kiedy zamykanie i uruchamianie jest zakończone. Po zamknięciu i uruchomieniu ‘lastbootuptime’ będzie odzwierciedlał czas, w którym system jest naprawdę ‘restartowany’, a nie faktyczny czas rozruchu. Tak więc wyłączenie/uruchomienie daje taki sam rezultat jak powrót z trybu suspend/hybernnate dla znacznika czasu LastBootUpTime.
Kilka odpowiedzi wymienia net statistics workstation
i zauważyłem, że obie :
net statistics server
oraz
net statistics workstation
powinny zawierać dane dotyczące ostatniego uruchomienia na linii Statistics since ...
.
Jednak niektóre wersje OS (np. Svr2008/6.0) zwrócą 1/1/1980 12:00
na datę podczas używania server
. Tak więc domyślnie ustawiam na workstation
.
Również możesz skrócić niektóre z komend takich jak net stats workstation
i uzyskać te same wyniki. Wreszcie, jeśli przeskakujesz z systemu do systemu, domyślne pole CMD nie jest wystarczająco duże, aby pokazać wszystkie wyniki z polecenia. Tak więc, aby uniknąć przewijania w górę i zobaczyć czas rozruchu, potoknę wyjście do more
. Dlatego moja domyślna komenda to:
net stats workstation | more
Z podobnego pytania ServerFault , przeszukaj/filtrować dziennik zdarzeń systemu Windows dla Event ID 6009
.
W systemie Windows 10: Event Viewer > Windows Logs > System
, a następnie działanie Filter Current Log...
.
Tak samo jak odpowiedź Maxa …
for /f %%a in ('WMIC OS GET lastbootuptime ^| find "."') DO set DTS=%%a
set BOOTTIME=%DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2% %DTS:~8,2%:%DTS:~10,2%
echo DTS : %DTS%
echo BOOTTIME :%BOOTTIME%
…ale w onelinerze:
for /f %a in ('WMIC OS GET lastbootuptime ^| find "."') DO set DTS=%a && echo %DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2% %DTS:~8,2%:%DTS:~10,2%
Ta implementacja wmi może wydawać się nieco niechlujna, ale jest bardzo szybka w porównaniu z innymi implementacjami powershell'a lub systeminfo i można łatwo zmienić format, ponieważ jest to wyraźnie widoczne w kodzie.
Dziękuję Max.