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


11

在Windows 10中,我想知道如何在脚本中告诉系统是因为接收到局域网唤醒(WoL)数据包而打开系统,还是由于按下电源按钮而打开了系统而引导的。

我确实找到了Win32_ComputerSystem类的WakeUpType属性。记录该文件是为了返回“导致系统启动的事件”。有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报告为唤醒原因。因此,即使在这种情况下,即使WakeUpType属性仍返回“ 6”(电源开关),Windows至少也可以确定由于WoL数据包而将其唤醒。

不幸的是,当系统接收到处于S5状态的WoL数据包时,它将正常启动并引导,但是我不能说它是由于WoL而引导的。powercfg /lastwake显示与由于按下电源按钮而从S5上电时的输出完全相同的输出:

C:\WINDOWS\system32>powercfg /lastwake
Wake History Count - 0

在任何电源状态(最高S5)下,我如何可靠地判断系统由于WoL开机/唤醒?


恐怕是网卡驱动程序问题。我在Windows 10中遇到了类似的问题-虽然计算机在关机时对WoL的反应非常好,但是如果进入休眠状态则完全不反应,这意味着网卡驱动程序代码没有为此准备。如果您可以找到其他(较新的)驱动程序版本,则可能会解决您的问题。除此之外,恐怕您已经完成了。
StanTastic

Answers:


1

我的方法是使用dmidecode,它会从BIOS读取数据,例如

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

类似于费廷根对这个问题的回答

如果那不起作用,则您的硬件一定不能正确记录该值。


-1

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


感谢-1,但有一条评论解释为什么我的(至今)替代解决方案不好,这将更加有用……
Max

1
我不知道是谁给了-1(不是我),但是我可以解释一下您的建议为什么不能解决我的问题:发送WoL数据包的设备是Steam链接。换句话说:我无法控制并且无法运行脚本的设备将发送WoL数据包。
Jurjen

@Jurjen感谢您的解释,到今天为止,我还无法想象有一种简单实用的方法来解决您的问题...(从理论上讲,您可以将我建议的解决方案与第二台PC一起使用,这只能通过WOL唤醒,因此SteamLink唤醒PC1,然后PC1在共享驱动器上的某个位置记笔记(在NAS上?),然后PC1唤醒PC2(您要查询的PC),然后PC1自行关闭,然后PC2检查共享驱动器以检查是否已WOL pachet从PC1(也从SteamLink)唤醒了它……可以工作,但是它很复杂,您需要另一台PC……
Max
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.