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