В Windows 10 я хотел бы знать, как я могу определить в сценарии, загружалась ли система из-за того, что она была включена путем получения пакета Wake-on-LAN (WoL), или потому, что она была включена из-за нажатия кнопки питания. .
Я нашел свойство WakeUpType для Win32_ComputerSystem класс. Это задокументировано для возврата «события, которое вызывает включение системы». Возможны 9 возвращаемых значений, одно из которых - «5» (что означает «удаленная локальная сеть»).
К сожалению, в моей системе он всегда возвращает «6» (что означает «выключатель питания»):
PS C:\WINDOWS\system32> echo $(Get-WmiObject -class win32_computersystem).wakeuptype
6
Я заметил, что после перевода системы в спящий режим и пробуждения с помощью WoL Windows публикует событие в системном журнале событий с источником «Power-Troubleshooter» и идентификатором события 1, содержащим текст:
Источник пробуждения: устройство - гигабитное сетевое соединение Intel (R) 82579 В
Также, powercfg /lastwake
сообщает NIC как причину пробуждения. Таким образом, по крайней мере, при выходе из спящего режима Windows может определить, что она проснулась из-за пакета WoL, даже несмотря на то, что свойство WakeUpType в этом случае по-прежнему возвращает «6» (переключатель питания).
К сожалению, когда система получает пакет WoL в состоянии S5, она правильно включается и загружается, но я не могу сказать, что она загрузилась из-за WoL. powercfg /lastwake
показывает точно такой же результат, как и при включении системы с S5 из-за нажатия кнопки питания:
C:\WINDOWS\system32>powercfg /lastwake
Wake History Count - 0
Как я могу достоверно определить из любого состояния питания (до S5), что система включается / просыпается из-за WoL?
Мой подход заключался бы в использовании dmidecode который будет читать данные из BIOS, что-то вроде
dmidecode | findstr / R / C: "Пробуждение"
Подобно ответу Фейтингена на этот вопрос
Если это не сработает, ваше оборудование не должно правильно записывать это значение.
Возможно, вы можете настроить сценарий (или программное обеспечение) для отслеживания события на ПК, который ОТПРАВЛЯЕТ пакет WOL.
Этот сценарий может записать что-то (текущую дату / время?) В файл где-нибудь (в сетевой папке?), А затем только что проснувшийся компьютер может проверить этот общий файл и определить, был ли он включен с помощью WOL. пакет.