什么是的语法可以订阅的一个对象是静态的事件在PowerShell?
-
22-09-2019 - |
题
寄存器-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" }
解决方案
如果你指派一个静态型的变量,可以订阅的静态活动。
例如:
$MyStaticType = [MyStaticNamespace.MyStaticClass]
Register-ObjectEvent -InputObject $MyStaticType -EventName MyStaticEvent -Action {Write-Host "Caught a static event"}
找到任何静态的事件的类型可能有,可以使用得到成员与静电开关
[MyStaticNamespace.MyStaticClass] | get-member -static -membertype event
编辑: 我也注意到在试图访问[Microsoft。Win32.SystemEvents]的事件,我需要运行一个提高(在Vista及以上),以便于访问的信息。
其他提示
史蒂夫得到了正确答案,所以没有必要投票在此(表决,他的代替).我只是想发表一样段,人们可以用来玩弄的静态活动,这样你不必找一个BCL静态活动,很容易起火。:-)
$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
不隶属于 StackOverflow