我正在研究一种解决方案,通过 LAN 唤醒激活机器,然后 System Center 将更新推送到客户端电脑(运行 Windows 7)。
现在我正在编写一个脚本 (PowerShell/C#),它检查机器是否应该在更新完成后关闭。
如果机器是通过 Wake On Lan 激活的,并且自激活后没有用户登录机器,则可以安全地关闭机器。否则,机器应保持开启状态。
有没有办法检查计算机是如何被激活的?
我正在研究一种解决方案,通过 LAN 唤醒激活机器,然后 System Center 将更新推送到客户端电脑(运行 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
这样你必须解析消息(不太好)
get-winevent -FilterHashtable @{"ProviderName"="Microsoft-Windows-Power-Troubleshooter";"id"=1} | Sort-Object {$_.timecreated} | select -last 1 | %{([xml]$_.ToXml()).Event.EventData.Data}
备注: Microsoft-Windows-Power-Troubleshooter提供程序也存在于 W2K8-R2 上,当我尝试唤醒我的旧服务器之一时,这WakeSourceType
是未知的。
这可能不是您正在寻找的,而是另一种方法: