Events 订阅对象的语法是什么;PowerShell中的静态事件?

Events 订阅对象的语法是什么;PowerShell中的静态事件?,events,powershell,powershell-2.0,Events,Powershell,Powershell 2.0,在所需参数InputObject中查找对象实例。对象的静态(共享)事件的语法是什么 更新:以下内容的正确语法: 不幸的是,SystemEvents将不会在PowerShell ISE中发出信号。下面是一个使用对象staic事件的示例,该事件在任何地方都有效: $networkInformation = [System.Net.NetworkInformation.NetworkChange]; $networkAddressChanged = Register-ObjectEvent -Inpu

在所需参数InputObject中查找对象实例。对象的静态(共享)事件的语法是什么

更新:以下内容的正确语法:

不幸的是,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"}
要查找类型可能具有的任何静态事件,可以使用Get Member和-static开关

[MyStaticNamespace.MyStaticClass] | get-member -static -membertype event
编辑:
我在尝试访问[Microsoft.Win32.SystemEvents]事件时注意到,我需要在提升的提示符下运行(在Vista和更高版本上)才能访问消息。

史蒂文得到了正确的答案,因此无需对此投票(改为投票)。我只是想发布一个示例片段,大家可以使用它来处理静态事件,这样就不必找到易于触发的BCL静态事件。:-)


PowerShell中正在运行一个消息循环,但您需要以管理员身份运行才能访问它。谢谢。我冒昧地借用了我问题中的大部分片段。
[MyStaticNamespace.MyStaticClass] | get-member -static -membertype event
$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