What is the syntax to subscribe to an object's static event in PowerShell? What is the syntax to subscribe to an object's static event in PowerShell? powershell powershell

What is the syntax to subscribe to an object's static event in PowerShell?


If you assign a static type to a variable, you can subscribe to static events.

For example:

$MyStaticType = [MyStaticNamespace.MyStaticClass]Register-ObjectEvent -InputObject $MyStaticType -EventName MyStaticEvent -Action {Write-Host "Caught a static event"}

To find any static events a type may have, you can use Get-Member with the -Static switch

[MyStaticNamespace.MyStaticClass] | get-member -static -membertype event

EDIT:I did notice when trying to access [Microsoft.Win32.SystemEvents] events, that I needed to be running in an elevated prompt (on Vista and above) in order to access the messages.


Steven's got the right answer so no need to vote on this (vote on his instead). I just wanted to post a sample snippet that folks can use to play around with static events such that you don't have to find a BCL static event that's easy to fire. :-)

$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 $srcUnregister-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