¿Cómo puedo saber si el sistema se inició por Wake-on-LAN (WoL) o por el botón de encendido?

11

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 /lastwakeinforma 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 /lastwakemuestra 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?

Jurjen
fuente
Me temo que es un problema del controlador de la tarjeta de red. He tenido un problema similar con Windows 10: aunque la computadora reacciona a WoL perfectamente bien cuando está apagada, no reacciona en absoluto si se pone en hibernación, lo que significa que el código del controlador de la tarjeta de red no está preparado para eso . Si puede encontrar una versión diferente (¿más reciente?) Del controlador, esto podría resolver su problema. Aparte de eso, me temo que ya terminaste.
StanTastic

Respuestas:

1

Mi enfoque sería usar dmidecode que leerá datos del BIOS, con algo como

dmidecode | Findstr / R / C: "Despertar"

De manera similar a la respuesta de feitingen a esta pregunta

Si eso no funciona, entonces su hardware no debe registrar correctamente ese valor.

fusorx
fuente
-1

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.

Max
fuente
Gracias por el -1, pero un comentario que explique por qué mi solución (aún alternativa) es mala, sería más útil ...
Max
1
No sé quién dio el -1 (no fui yo), pero puedo explicar por qué su sugerencia no resolverá mi problema: el dispositivo que envía el paquete WoL es un Steam Link. En otras palabras: un dispositivo sobre el que no tengo más control y no puedo ejecutar scripts, envía el paquete WoL.
Jurjen
@Jurjen gracias por la explicación, a partir de hoy no puedo imaginar una forma simple y práctica de resolver su problema ... (teóricamente, podría usar mi solución propuesta con una segunda PC, que solo se activa a través de WOL, para que SteamLink activa PC1, luego PC1 toma nota en algún lugar de una unidad compartida (¿en un NAS?) Luego PC1 activa PC2 (la PC de tu pregunta) luego PC1 se apaga, luego PC2 comprueba la unidad compartida para comprobar si ha sido despertado por WOL pachet desde PC1 (y así desde SteamLink) ... podría funcionar, pero es complejo, y necesitas otra PC ...
Max