No Windows 10, gostaria de saber como posso saber em um script se o sistema inicializou porque foi ativado ao receber um pacote Wake-on-LAN (WoL) ou se foi ativado por pressionar o botão liga / desliga .
Eu encontrei a propriedade WakeUpType da classe Win32_ComputerSystem . Isso está documentado para retornar o "evento que causa a inicialização do sistema". Existem 9 valores de retorno possíveis, um deles sendo "5" (significando "LAN Remote").
Infelizmente, no meu sistema, sempre parece retornar "6" (que significa "Power Switch"):
PS C:\WINDOWS\system32> echo $(Get-WmiObject -class win32_computersystem).wakeuptype
6
Percebi que, depois de colocar o sistema em suspensão e ativá-lo usando WoL, o Windows publica um evento no log de eventos do sistema com a fonte "Power-Troubleshooter" e o ID do evento 1, contendo o texto:
Origem da ativação: Dispositivo - conexão de rede Gigabit Intel (R) 82579V
Além disso, powercfg /lastwake
relata a NIC como o motivo da ativação. Portanto, pelo menos ao sair do modo de suspensão, o Windows pode determinar que acordou por causa de um pacote WoL, mesmo que a propriedade WakeUpType ainda retorne "6" (Power Switch) nesse caso.
Infelizmente, quando o sistema recebe um pacote WoL no estado S5, ele é inicializado e inicializado 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 por pressionar o botão liga / desliga:
C:\WINDOWS\system32>powercfg /lastwake
Wake History Count - 0
Como posso saber com segurança, de qualquer estado de energia (até S5), que o sistema foi ligado / acordado por causa da WoL?