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?