作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在研究一种解决方案,通过 Wake On 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
未知。
关于c# - 检查计算机是否通过 Wake On Lan 激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24031755/
我是一名优秀的程序员,十分优秀!