Dans Windows 10, je voudrais savoir comment je peux dire dans un script si le système a démarré parce qu'il a été allumé en recevant un paquet Wake-on-LAN (WoL), ou parce qu'il a été allumé en appuyant sur le bouton d'alimentation .
J'ai trouvé la propriété WakeUpType de la classe Win32_ComputerSystem . Cela est documenté pour renvoyer «l'événement qui provoque la mise sous tension du système». Il y a 9 valeurs de retour possibles, l'une d'entre elles étant "5" (signifiant "LAN Remote").
Malheureusement, sur mon système, il semble toujours retourner "6" (ce qui signifie "Power Switch"):
PS C:\WINDOWS\system32> echo $(Get-WmiObject -class win32_computersystem).wakeuptype
6
J'ai remarqué qu'après avoir mis le système en veille et l'avoir réveillé à l'aide de WoL, Windows publie un événement dans le journal des événements système avec la source "Power-Troubleshooter" et l'ID d'événement 1, contenant le texte:
Wake Source: appareil - connexion réseau Gigabit Intel (R) 82579V
En outre, powercfg /lastwake
indique la carte réseau comme raison du réveil. Ainsi, au moins lors de la sortie de veille, Windows peut déterminer qu'il s'est réveillé à cause d'un paquet WoL, même si la propriété WakeUpType renvoie toujours "6" (interrupteur d'alimentation) dans ce cas.
Malheureusement, lorsque le système reçoit un paquet WoL à l'état S5, il se met correctement sous tension et démarre, mais je ne peux pas dire qu'il a démarré à cause de WoL. powercfg /lastwake
affiche exactement la même sortie que lors de la mise sous tension du système à partir de S5 en appuyant sur le bouton d'alimentation:
C:\WINDOWS\system32>powercfg /lastwake
Wake History Count - 0
Comment puis-je savoir de manière fiable, à partir de n'importe quel état d'alimentation (jusqu'à S5), que le système a été mis sous / hors tension à cause de WoL?