如何判断系统是因为网络唤醒 (WoL) 还是因为电源按钮启动?

Jur*_*jen 12 wake-on-lan windows-10

在 Windows 10 中,我想知道如何在脚本中判断系统启动是因为它是通过接收 Wake-on-LAN (WoL) 数据包打开的,还是因为按下电源按钮而打开.

我确实找到了Win32_ComputerSystem类的 WakeUpType 属性。这被记录为返回“导致系统启动的事件”。有 9 个可能的返回值,其中之一是“5”(意思是“LAN 远程”)。

不幸的是,在我的系统上,它似乎总是返回“6”(意思是“电源开关”):

PS C:\WINDOWS\system32> echo $(Get-WmiObject -class win32_computersystem).wakeuptype
6
Run Code Online (Sandbox Code Playgroud)

我注意到在使系统进入睡眠状态并使用 WoL 唤醒它后,Windows 会在系统事件日志中发布一个事件,其中包含源“Power-Troubleshooter”和事件 ID 1,其中包含文本:

唤醒源:设备 -Intel(R) 82579V 千兆网络连接

此外,powercfg /lastwake报告 NIC 作为唤醒的原因。因此,至少在从睡眠状态唤醒时,Windows 能够确定它是由于 WoL 数据包而唤醒的,即使在这种情况下 WakeUpType 属性仍然返回“6”(电源开关)。

不幸的是,当系统在 S5 状态下接收到 WoL 数据包时,它会正常启动并启动,但我无法判断它是因为 WoL 启动的。powercfg /lastwake由于按下电源按钮,显示与系统从 S5 启动时完全相同的输出:

C:\WINDOWS\system32>powercfg /lastwake
Wake History Count - 0
Run Code Online (Sandbox Code Playgroud)

我如何从任何电源状态(直到 S5)可靠地判断系统是否因为 WoL 启动/唤醒?

Max*_*Max 1

也许您可以设置一个脚本(或软件)来跟踪 PC 上发送 WOL 数据包的事件。
该脚本可以在某处(网络共享上?)的文件中写入一些内容(当前日期/时间?),然后刚刚唤醒的计算机可以检查该共享文件,并确定它是否已通过 WOL 启动包。