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?
fuente
Respuestas:
Mi enfoque sería usar dmidecode que leerá datos del BIOS, con algo como
De manera similar a la respuesta de feitingen a esta pregunta
Si eso no funciona, entonces su hardware no debe registrar correctamente ese valor.
fuente
Tal vez pueda configurar un script (o un software) para rastrear el evento en la PC que ENVÍA el paquete WOL.
Este script podría escribir algo (¿la fecha / hora actual?) En un archivo en algún lugar (¿en un recurso compartido de red?) Y luego la computadora recién despertada podría verificar este archivo compartido y determinar si ha sido encendido por un WOL paquete.
fuente