我如何判断系统是由于局域网唤醒 (WoL) 还是由于电源按钮启动的?

我如何判断系统是由于局域网唤醒 (WoL) 还是由于电源按钮启动的?

在 Windows 10 中,我想知道如何在脚本中判断系统启动是因为接收局域网唤醒 (WoL) 数据包而启动,还是因为按下电源按钮而启动。

我确实找到了Win32_计算机系统类。据记录,该类返回“导致系统启动的事件”。有 9 个可能的返回值,其中一个是“5”(表示“LAN 远程”)。

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

PS C:\WINDOWS\system32> echo $(Get-WmiObject -class win32_computersystem).wakeuptype
6

我注意到,在使系统进入睡眠状态并使用 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

从任何电源状态(最高 S5)来看,我如何能可靠地判断系统是否因 WoL 而开机/唤醒?

答案1

我的方法是使用解码它将从 BIOS 读取数据,例如

dmidecode | findstr /R /C:“唤醒”

类似于 feitingen 的回答这个问题

如果这不起作用那么您的硬件一定没有正确记录该值。

答案2

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

相关内容