在Windows 10中,我想知道如何在脚本中告诉系统是否通过接收局域网唤醒(WOL)数据包打开系统,或者因为按下电源button而打开系统。
我find了Win32_ComputerSystem类的WakeUpType属性。 这被logging为返回“导致系统启动的事件”。 有9个可能的返回值,其中之一是“5”(意思是“LAN Remote”)。
不幸的是,在我的系统上似乎总是返回“6”(意思是“电源开关”):
PS C:\WINDOWS\system32> echo $(Get-WmiObject -class win32_computersystem).wakeuptype 6
我注意到,在系统进入睡眠状态并使用WoL唤醒之后,Windows在系统事件日志中发布事件,其源代码为“Power-Troubleshooter”,事件ID为1,包含以下文本:
唤醒来源:设备-Intel(R)82579V千兆networking连接
而且, powercfg /lastwake报告NIC是唤醒的原因。 所以,至less当从睡梦中醒来时,即使WakeUpType属性在这种情况下仍然返回“6”(电源开关),由于WoL数据包的缘故,它能够确定它被唤醒。
不幸的是,当系统收到一个处于S5状态的WoL数据包时,它将正常启动和启动,但是我不能说因为WoL而启动它。 powercfg /lastwake显示与由于按下电源button而从S5开启系统时完全相同的输出:
C:\WINDOWS\system32>powercfg /lastwake Wake History Count - 0
如何从任何电源状态(至S5)可靠地判断出因为WoL而导致系统上电/唤醒?
我的方法是使用dmidecode ,这将从BIOS读取数据,类似的东西
dmidecode | findstr / R / C:“唤醒”
同feitingen对这个问题的回答一样
如果这不起作用,那么你的硬件不能正确logging这个值。
也许你可以设置一个脚本(或一个软件)来跟踪发送WOL数据包的PC上的事件。
这个脚本可以在一个文件的某个地方(networking共享?)写一些东西(当前的date/时间?),然后这个被唤醒的计算机可以检查这个共享的文件,并确定它是否被一个WOL包。