Como posso saber se o sistema inicializou por causa do Wake-on-LAN (WoL) ou por causa do botão liga / desliga?

11

No Windows 10, gostaria de saber como posso dizer em um script se o sistema foi inicializado porque foi ativado recebendo um pacote Wake-on-LAN (WoL) ou porque estava ativado devido a um pressionamento o botão de energia.

Eu encontrei a propriedade WakeUpType do Win32_ComputerSystem . Isso é documentado para retornar o "evento que faz com que o sistema seja ligado". Existem 9 valores de retorno possíveis, um deles sendo "5" (significando "LAN Remote").

Infelizmente, no meu sistema, parece sempre retornar "6" (significando "Power Switch"):

PS C:\WINDOWS\system32> echo $(Get-WmiObject -class win32_computersystem).wakeuptype
6

Percebi que, após colocar o sistema em suspensão e ativá-lo usando o WoL, o Windows envia um evento no log de eventos do sistema com a fonte "Power-Troubleshooter" e o ID do evento 1, contendo o texto:

Wake Source: Device -Intel(R) 82579V Gigabit Network Connection

Além disso, powercfg /lastwake informa a NIC como o motivo para o despertar. Assim, pelo menos, quando acordar do sono, o Windows é capaz de determinar que ele acordou devido a um pacote WoL, embora a propriedade WakeUpType ainda retorne "6" (Power Switch) nesse caso.

Infelizmente, quando o sistema recebe um pacote de WoL no estado S5, ele irá inicializar e ligar corretamente, mas não posso dizer que ele foi inicializado por causa do WoL. powercfg /lastwake mostra exatamente a mesma saída que quando o sistema liga a partir do S5 devido ao pressionamento do botão liga / desliga:

C:\WINDOWS\system32>powercfg /lastwake
Wake History Count - 0

Como posso saber de forma confiável, a partir de qualquer estado de energia (até S5), que o sistema ligou / despertou por causa do WoL?

    
por Jurjen 13.02.2016 / 20:15

2 respostas

1

Minha abordagem seria usar dmidecode que lerá os dados do BIOS, com algo como

dmidecode | findstr /R /C:"Wake-up"

Semelhantemente à resposta do feitingen a esta questão

Se isso não funcionar, seu hardware não deve estar gravando corretamente esse valor.

    
por 22.03.2016 / 16:19
-1

Talvez você possa configurar um script (ou um software) para rastrear o evento no PC que ENVIE o pacote WOL.
Este script poderia escrever algo (a data / hora atual?) Em um arquivo em algum lugar (em um compartilhamento de rede?) E, em seguida, o computador recém-acordado poderia verificar esse arquivo compartilhado e determinar se ele foi ligado por um WOL pacote.

    
por 16.02.2016 / 22:51