Wou*_*ort 7 c# powershell wake-on-lan
我正在开发一种解决方案,通过Wake On Lan激活机器,然后System Center将更新推送到客户端PC(运行Windows 7).
现在我正在使用脚本(PowerShell/C#),它检查更新完成后是否应该关闭机器.
如果通过Wake On Lan激活机器并且自激活后没有用户登录机器,则可以安全地关闭机器.否则,机器应该继续.
有没有办法检查计算机是如何激活的?
从 Windows 7(也许是 Vista)开始,当您唤醒计算机时,“Microsoft-Windows-Power-Troubleshooter”会在系统事件日志中提供一条日志,提供唤醒源。以下是两个事件(在 Windows 8 桌面上拍摄,但我在 Window 7 笔记本电脑上也有相同的事件),第一个事件是由 WOL 生成的,第二个事件是使用正面按钮生成的:

因此,使用 PowerShell 您可以测试:
(Get-EventLog -LogName System -Source "Microsoft-Windows-Power-Troubleshooter" -AsBaseObject | Sort-Object {$_.timegenerated} | select -last 1 ).Message
Run Code Online (Sandbox Code Playgroud)
这样你就必须解析消息(不太好)
get-winevent -FilterHashtable @{"ProviderName"="Microsoft-Windows-Power-Troubleshooter";"id"=1} | Sort-Object {$_.timecreated} | select -last 1 | %{([xml]$_.ToXml()).Event.EventData.Data}
Run Code Online (Sandbox Code Playgroud)
备注: Microsoft-Windows-Power-Troubleshooter提供程序也存在于 W2K8-R2 上,当我尝试唤醒我的旧服务器之一时,该提供程序WakeSourceType未知。