使用Register-WmiEvent使用PowerShhell 4.0捕获Windows 8.1系统事件/触发器?

时间:2014-03-05 15:21:32

标签: windows events powershell wmi powershell-v4.0

我正在尝试编写一个高效的 Windows 8.1 PowerShell 4.0脚本,它将捕获/触发两种类型的事件。我希望能够捕获这些事件/触发器,以便我可以执行诸如运行脚本或启动/停止服务等操作。

我想要捕捉/触发的事件是:

  • 插入/拔出电源线(电池充电/放电)
  • 连接/断开硬件(如Surface Pro 2 Type Cover 2)

有效率我的意思是脚本 不应该 有一个无限循环来定期检查状态。我会假设我应该能够编写一些能够在Windows生成事件时捕获事件的内容吗?

到目前为止,我已经了解到我可以使用Register-WmiEvent PowerShell cmdlet订阅WMI事件。

  1. 我认为这是最有效的方式,所以我不必连续轮询,而是对事件做出反应?
  2. 如果是这样,在注册活动时使用-query-class会更好吗?我看到的唯一区别是,在使用-query时(例如Register-WmiEvent -query "Select * From Win32_PowerManagementEvent where EventType=10")显然很容易过滤事件。
  3. 我会担心如何捕捉我以后需要的特定事件。现在我正在试图弄清楚如何捕捉/触发事件。

1 个答案:

答案 0 :(得分:3)

对于第一个(插入/拔出电源线),请查看Win32_PowerManagementEvent class;你可以使用:

Register-WmiEvent -Query "select * from Win32_PowerManagementEvent" -MessageData "Event Power by JPB" -SourceIdentifier "EVTPOW1" 
Wait-Event -SourceIdentifier "EVTPOW1"

或者

Register-WmiEvent -Query "select * from Win32_PowerManagementEvent"  -SourceIdentifier "EVTPOW2"  -Action {Write-Host "blurp"; [console]::Beep(500,500)}

在第二种情况下,您将脚本块放入所需的代码。