En Windows 10, me gustaría saber cómo puedo saber en un script si el sistema se inició porque se encendió al recibir un paquete Wake-on-LAN (WoL), o porque se encendió al presionar el botón de encendido .
Encontré la propiedad WakeUpType de la clase Win32_ComputerSystem . Eso está documentado para devolver el "evento que hace que el sistema se encienda". Hay 9 posibles valores de retorno, uno de ellos es "5" (que significa "LAN Remote").
Desafortunadamente, en mi sistema siempre parece devolver "6" (que significa "Interruptor de encendido"):
PS C:\WINDOWS\system32> echo $(Get-WmiObject -class win32_computersystem).wakeuptype
6
Me di cuenta de que después de poner el sistema en suspensión y activarlo con WoL, Windows publica un evento en el registro de eventos del sistema con la fuente "Power-Solución de problemas" e ID de evento 1, que contiene el texto:
Fuente de activación: Dispositivo -Intel (R) 82579V Conexión de red Gigabit
Además, powercfg /lastwake
informa a la NIC como la razón para despertarse. Entonces, al menos al despertar de la suspensión, Windows puede determinar que se despertó debido a un paquete WoL, a pesar de que la propiedad WakeUpType aún devuelve "6" (Interruptor de encendido) en ese caso.
Desafortunadamente, cuando el sistema recibe un paquete WoL en estado S5, se encenderá y arrancará correctamente, pero no puedo decir que se haya iniciado debido a WoL. powercfg /lastwake
muestra exactamente la misma salida que cuando el sistema se enciende desde S5 al presionar el botón de encendido:
C:\WINDOWS\system32>powercfg /lastwake
Wake History Count - 0
¿Cómo puedo saber de manera confiable, desde cualquier estado de energía (hasta S5), que el sistema se encendió / activó debido a WoL?