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 /lastwake
zgł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 /lastwake
pokazuje 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?