检查计算机是否通过Wake On Lan激活

时间:2014-06-04 07:44:31

标签: c# powershell wake-on-lan

我正致力于通过Wake On Lan激活计算机的解决方案,然后System Center将更新推送到客户端电脑(运行Windows 7)。

现在我正在使用脚本(PowerShell / C#),它检查更新完成后是否应该关闭计算机。

如果通过Wake On Lan激活机器并且自激活后没有用户登录机器,则可以安全地关闭机器。否则,机器应该继续运行。

有没有办法检查计算机是如何激活的?

2 个答案:

答案 0 :(得分:1)

从Windows 7(可能是Vista)开始,当您唤醒计算机时,“Microsoft-Windows-Power-Troubleshooter”会在系统事件日志中提供一个日志,提供唤醒源。这是两个事件(在Windows 8桌面上拍摄,但我的Window 7笔记本电脑上有相同的事件),第一个是由WOL生成的,第二个是使用正面按钮生成的:

enter image description here enter image description here

因此,使用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上,当我尝试唤醒我的旧服务器之一{{1是未知的。

答案 1 :(得分:0)

这可能不是您正在寻找的,而是另一种方法:

  1. 在服务器端,记住发送WOL数据包的时间
  2. 在客户端,向服务器询问最后一次WOL数据包时间
  3. 在客户端,检查PC的正常运行时间,例如使用WMI for uptime in PowershellCodeplex Uptime
  4. 比较两者。也许考虑硬件启动过程的一些延迟。我不确切知道硬件或软件是否计算正常运行时间。
  5. 对于已登录的用户,您可以使用WMI for logged on users from Powershell
相关问题