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 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 /lastwakerelata 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 /lastwakemostra 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?

Jurjen
fonte
Receio que seja um problema de driver da placa de rede. Estou enfrentando um problema semelhante com o Windows 10 - enquanto o computador reage perfeitamente à WoL quando é desligado, ele não reage se for colocado em hibernação, o que significa que o código do driver da placa de rede não está preparado para isso. . Se você encontrar uma versão diferente (mais recente?) Do driver, isso poderá resolver seu problema. Além disso, receio que você tenha terminado.
StanTastic

Respostas:

1

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

dmidecode | findstr / R / C: "Ativação"

Da mesma forma que a resposta de Feitingen a esta pergunta

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

fusorx
fonte
-1

Talvez você possa configurar um script (ou um software) para rastrear o evento no PC que ENVIAR o pacote WOL.
Esse script pode gravar algo (a data / hora atual?) Em um arquivo em algum lugar (em um compartilhamento de rede?) E, em seguida, o computador que acabou de acordar pode verificar esse arquivo compartilhado e determinar se ele foi ativado por um WOL pacote.

Máx.
fonte
Obrigado pela -1, mas um comentário explicando por que a minha solução (ainda alternativa) é ruim, seria mais útil ...
Max
1
Não sei quem deu o -1 (não fui eu), mas posso explicar por que sua sugestão não resolverá o meu problema: o dispositivo que envia o pacote WoL é um Steam Link. Em outras palavras: um dispositivo no qual eu não tenho mais controle e não consigo executar scripts envia o pacote WoL.
Jurjen
@Jurjen obrigado pela explicação, a partir de hoje não consigo imaginar uma maneira simples e prática de resolver seu problema ... (teoricamente, você poderia usar minha solução proposta com um segundo PC, que só é acordado via WOL, para que O SteamLink ativa o PC1, depois o PC1 toma nota em algum lugar de uma unidade compartilhada (em um NAS?), Depois o PC1 ativa o PC2 (o PC de sua pergunta), depois o PC1 se desliga e depois o PC2 verifica a unidade compartilhada para verificar se foi acordado por WOL Pachet do PC1 (e assim a partir SteamLink) ... ele poderia trabalhar, mas é complexo, e você precisa de outro PC ...
Max