Jak mogę sprawdzić, czy system uruchomił się z powodu Wake-on-LAN (WoL), czy z powodu przycisku zasilania?

11

W systemie Windows 10 chciałbym wiedzieć, w jaki sposób mogę stwierdzić w skrypcie, czy system uruchomił się, ponieważ został włączony przez odbieranie pakietu Wake-on-LAN (WoL), lub ponieważ został włączony z powodu naciśnięcia przycisku zasilania .

Znalazłem właściwość WakeUpType klasy Win32_ComputerSystem . Jest to udokumentowane w celu zwrócenia „zdarzenia, które powoduje włączenie systemu”. Istnieje 9 możliwych wartości zwrotnych, z których jedna to „5” (co oznacza „LAN Remote”).

Niestety w moim systemie zawsze wydaje się, że zwraca „6” (co oznacza „Przełącznik zasilania”):

PS C:\WINDOWS\system32> echo $(Get-WmiObject -class win32_computersystem).wakeuptype
6

Zauważyłem, że po uśpieniu systemu i przebudzeniu go za pomocą WoL, system Windows publikuje zdarzenie w dzienniku zdarzeń systemu ze źródłem „Narzędzie do rozwiązywania problemów z zasilaniem” i identyfikatorem zdarzenia 1, zawierające tekst:

Wake Source: Device -Intel (R) 82579V Gigabit Network Connection

Ponadto powercfg /lastwakezgłasza kartę sieciową jako przyczynę przebudzenia. Tak więc przynajmniej po przebudzeniu ze snu system Windows jest w stanie ustalić, że obudził się z powodu pakietu WoL, mimo że właściwość WakeUpType nadal zwraca w tym przypadku „6” (Przełącznik zasilania).

Niestety, kiedy system otrzyma pakiet WoL w stanie S5, odpowiednio się włączy i uruchomi, ale nie mogę powiedzieć, że uruchomił się z powodu WoL. powercfg /lastwakepokazuje dokładnie takie samo wyjście, jak wtedy, gdy system włącza się z S5 z powodu naciśnięcia przycisku zasilania:

C:\WINDOWS\system32>powercfg /lastwake
Wake History Count - 0

Jak w sposób wiarygodny stwierdzić z dowolnego stanu zasilania (do S5), że system został włączony / obudził się z powodu WoL?

Jurjen
źródło
Obawiam się, że to problem ze sterownikiem karty sieciowej. Mam do czynienia z podobnym problemem z Windows 10 - podczas gdy komputer reaguje na WoL doskonale, gdy jest wyłączony, wcale nie reaguje, jeśli przejdzie w stan hibernacji, co oznacza, że ​​kod sterownika karty sieciowej nie jest na to przygotowany . Jeśli znajdziesz inną (nowszą?) Wersję sterownika, może to rozwiązać problem. Poza tym obawiam się, że już po wszystkim.
StanTastic

Odpowiedzi:

1

Moje podejście polegałoby na użyciu dmidecode, który odczyta dane z BIOS-u z czymś takim

dmidecode | findstr / R / C: „Wake-up”

Podobnie jak odpowiedź Feitingena na to pytanie

Jeśli to nie zadziała, twój sprzęt nie może poprawnie rejestrować tej wartości.

Fusorx
źródło
-1

Być może możesz skonfigurować skrypt (lub oprogramowanie) do śledzenia zdarzenia na PC, które WYSŁA pakiet WOL.
Ten skrypt może zapisać coś (bieżącą datę / godzinę?) W jakimś pliku (w udziale sieciowym?), A następnie dopiero co przebudzony komputer może sprawdzić ten udostępniony plik i ustalić, czy został zasilony przez WOL paczka.

Max
źródło
Dzięki za -1, ale komentarz wyjaśniający, dlaczego moje (jeszcze alternatywne) rozwiązanie jest złe, przydałoby się bardziej ...
Max
1
Nie wiem, kto dał -1 (to nie byłem ja), ale mogę wyjaśnić, dlaczego twoja sugestia nie rozwiąże mojego problemu: urządzenie wysyłające pakiet WoL to łącze Steam. Innymi słowy: urządzenie, nad którym nie mam żadnej kontroli i nie mogę uruchamiać skryptów, wysyła pakiet WoL.
Jurjen
@Jurjen dzięki za wyjaśnienie, na dzień dzisiejszy nie wyobrażam sobie prostego i praktycznego sposobu rozwiązania problemu ... (teoretycznie możesz użyć mojego proponowanego rozwiązania z drugim komputerem PC, który budzi się tylko za pośrednictwem WOL, dzięki czemu SteamLink obudził PC1, następnie PC1 zanotował gdzieś na współdzielonym dysku (na NAS?), Następnie PC1 obudził PC2 (komputer z pytaniem), następnie PC1 się wyłączył, a następnie PC2 sprawdź udostępniony dysk, aby sprawdzić, czy został obudzony przez WOL pachet z PC1 (a więc ze SteamLink) ... może działać, ale jest złożony i potrzebujesz innego komputera ...
Max