Register-ObjectEvent在必需参数 InputObject 中查找对象实例。对象的静态(共享)事件的语法是什么?
更新:更正TimeChanged的语法:
$systemEvents = [Microsoft.Win32.SystemEvents]
$timeChanged = Register-ObjectEvent -InputObject $systemEvents
-EventName 'TimeChanged' -Action { Write-Host "Time changed" }
不幸的是,SystemEvents不会在 PowerShell ISE 中发出信号。这是一个使用对象的staic事件的示例,它可以在任何地方使用:
$networkInformation = [System.Net.NetworkInformation.NetworkChange];
$networkAddressChanged = Register-ObjectEvent -InputObject $networkInformation
-EventName 'NetworkAddressChanged'
-Action { Write-Host "NetworkAddressChanged event signaled" }
答案 0 :(得分:6)
如果为变量指定静态类型,则可以订阅静态事件。
例如:
$MyStaticType = [MyStaticNamespace.MyStaticClass]
Register-ObjectEvent -InputObject $MyStaticType -EventName MyStaticEvent -Action {Write-Host "Caught a static event"}
要查找某个类型可能包含的任何静态事件,可以将Get-Member与-Static开关一起使用
[MyStaticNamespace.MyStaticClass] | get-member -static -membertype event
修改强> 我在尝试访问[Microsoft.Win32.SystemEvents]事件时注意到,我需要在提升的提示符下运行(在Vista及更高版本上)才能访问这些消息。
答案 1 :(得分:2)
$src = @'
using System;
namespace Utils {
public static class StaticEventTest
{
public static event EventHandler Fired;
public static void RaiseFired()
{
if (Fired != null)
{
Fired(typeof(StaticEventTest), EventArgs.Empty);
}
}
}}
'@
$srcId = 'Fired'
Add-Type -TypeDefinition $src
Unregister-Event -SourceIdentifier $srcId -ea 0
$id = Register-ObjectEvent ([Utils.StaticEventTest]) Fired `
-SourceIdentifier $srcId -Action {"The static event fired"}
[Utils.StaticEventTest]::RaiseFired()
while (!$id.HasMoreData) { Start-Sleep -Milliseconds 250 }
Receive-Job $id