In Windows 10, vorrei sapere come posso dire in uno script se il sistema si è avviato perché è stato acceso ricevendo un pacchetto Wake-on-LAN (WoL) o perché è stato acceso a causa della pressione del pulsante di accensione .
Ho trovato la proprietà WakeUpType della classe Win32_ComputerSystem . Ciò è documentato per restituire "l'evento che provoca l'accensione del sistema". Esistono 9 possibili valori di ritorno, uno dei quali è "5" (che significa "LAN Remote").
Sfortunatamente, sul mio sistema sembra sempre restituire "6" (che significa "Interruttore di accensione"):
PS C:\WINDOWS\system32> echo $(Get-WmiObject -class win32_computersystem).wakeuptype
6
Ho notato che dopo aver messo il sistema in modalità sleep e averlo riattivato utilizzando WoL, Windows registra un evento nel registro eventi di sistema con l'origine "Power-Troubleshooter" e l'ID evento 1, contenente il testo:
Wake Source: Device -Intel (R) 82579V Connessione di rete Gigabit
Inoltre, powercfg /lastwake
segnala la scheda di rete come motivo per svegliarsi. Quindi, almeno al risveglio dal sonno Windows è in grado di determinare che si è svegliato a causa di un pacchetto WoL, anche se la proprietà WakeUpType restituisce comunque "6" (interruttore di accensione) in quel caso.
Sfortunatamente, quando il sistema riceve un pacchetto WoL nello stato S5, si accenderà e si avvierà correttamente, ma non posso dire che sia stato avviato a causa di WoL. powercfg /lastwake
mostra esattamente lo stesso output che ha quando il sistema si accende da S5 a causa della pressione del pulsante di accensione:
C:\WINDOWS\system32>powercfg /lastwake
Wake History Count - 0
Come posso sapere in modo affidabile, da qualsiasi stato di alimentazione (fino a S5), che il sistema è stato acceso / attivato a causa di WoL?