В 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?