Как узнать, загружена ли система из-за Wake-on-LAN (WoL) или из-за кнопки питания?

11

В Windows 10 я хотел бы знать, как я могу определить в скрипте, загружалась ли система, потому что она была включена при получении пакета Wake-on-LAN (WoL), или потому что она была включена из-за нажатия кнопки питания ,

Я нашел свойство WakeUpType класса Win32_ComputerSystem . Это задокументировано для возврата «события, которое приводит к включению системы». Существует 9 возможных возвращаемых значений, одно из которых «5» (что означает «Удаленный LAN»).

К сожалению, в моей системе всегда возвращается «6» (что означает «выключатель питания»):

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

Я заметил, что после перевода системы в спящий режим и ее активации с помощью WoL Windows публикует событие в системном журнале событий с источником «Power-Troubleshooter» и идентификатором события 1, содержащим текст:

Источник пробуждения: Device -Intel (R) 82579V Gigabit Network Connection

Также powercfg /lastwakeсообщает NIC как причину просыпания. Таким образом, по крайней мере при выходе из спящего режима Windows может определить, что она проснулась из-за пакета WoL, даже если свойство WakeUpType по-прежнему возвращает «6» (выключатель питания) в этом случае.

К сожалению, когда система получает пакет WoL в состоянии S5, он правильно включается и загружается, но я не могу сказать, что он загрузился из-за WoL. powercfg /lastwakeпоказывает точно такой же вывод, как и при включении системы с S5 из-за нажатия кнопки питания:

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

Как я могу достоверно определить из любого состояния питания (до S5), что система включилась / проснулась из-за WoL?

Jurjen
источник
Боюсь, это проблема с драйвером сетевой карты. У меня возникла похожая проблема с Windows 10 - хотя компьютер отлично реагирует на WoL, когда он выключен, он вообще не реагирует, если переводится в спящий режим, а это означает, что код драйвера сетевой карты для этого не подготовлен , Если вы можете найти другую (более новую?) Версию драйвера, это может решить вашу проблему. Кроме того, я боюсь, что вы сделали для.
StanTastic

Ответы:

1

Мой подход заключается в использовании dmidecode, который будет читать данные из BIOS, с чем-то вроде

dmidecode | findstr / R / C: «Проснись»

Аналогично ответу Файтинга на этот вопрос

Если это не работает, то ваше оборудование не должно правильно записывать это значение.

fusorx
источник
-1

Может быть, вы можете настроить скрипт (или программное обеспечение) для отслеживания события на ПК, который отправляет пакет WOL.
Этот сценарий может записать что-то (текущую дату / время?) В файл где-нибудь (на сетевом ресурсе?), А затем только что проснувшийся компьютер может проверить этот общий файл и определить, был ли он включен WOL пакет.

Максимум
источник
Спасибо за -1, но комментарий, объясняющий, почему мое (пока альтернативное) решение плохое, был бы более полезным ...
Макс
1
Я не знаю, кто дал -1 (это был не я), но я могу объяснить, почему ваше предложение не решит мою проблему: устройство, отправляющее пакет WoL, является Steam Link. Другими словами: устройство, которое я больше не контролирую и не могу запускать сценарии, отправляет пакет WoL.
Юрьен
@Jurjen спасибо за объяснение, на сегодняшний день я не могу представить простой и практичный способ решения вашей проблемы ... (теоретически вы могли бы использовать предложенное мной решение со вторым ПК, который просыпался только через WOL, так что SteamLink активирует ПК1, затем ПК1 записывает где-то на общем диске (на NAS?), Затем ПК1 активирует ПК2 (компьютер, на который вы обращаетесь), затем ПК1 выключается, затем ПК2 проверяет общий диск, чтобы проверить, был ли он проснулся от WOL pachet от PC1 (и так от SteamLink) ... это могло бы работать, но это сложно, и вам нужен еще один компьютер ...
Макс