Freigeben über


Get-EventSubscriber

Ruft die Ereignisabonnenten in der aktuellen Sitzung ab.

Syntax

Get-EventSubscriber
   [[-SourceIdentifier] <String>]
   [-Force]
   [<CommonParameters>]
Get-EventSubscriber
   [-SubscriptionId] <Int32>
   [-Force]
   [<CommonParameters>]

Beschreibung

Das Cmdlet Get-EventSubscriber ruft die Ereignisabonnenten in der aktuellen Sitzung ab.

Wenn Sie ein Ereignis mithilfe eines Register-Ereignis-Cmdlets abonnieren, wird Ihrer PowerShell-Sitzung ein Ereignisabonnent hinzugefügt, und die Ereignisse, die Sie abonniert haben, werden ihrer Ereigniswarteschlange hinzugefügt, wenn sie ausgelöst werden. Um ein Ereignisabonnement zu stornieren, löschen Sie den Ereignisabonnenten mithilfe des Unregister-Event-Cmdlets.

Beispiele

Beispiel 1: Abrufen des Ereignisabonnents für ein Timerereignis

PS C:\> $Timer = New-Object Timers.Timer
PS C:\> $Timer | Get-Member -Type Event
PS C:\> Register-ObjectEvent -InputObject $Timer -EventName Elapsed -SourceIdentifier Timer.Elapsed
PS C:\> Get-EventSubscriber
PS C:\> $Timer = New-Object Timers.Timer
PS C:\> $Timer | Get-Member -Type Event
TypeName: System.Timers.Timer
Name     MemberType Definition
----     ---------- ----------
Disposed Event      System.EventHandler Disposed(System.Object, System.EventArgs)
Elapsed  Event      System.Timers.ElapsedEventHandler Elapsed(System.Object, System.Timers.ElapsedEventArgs) PS C:\> Register-ObjectEvent -InputObject $Timer -EventName Elapsed -SourceIdentifier Timer.Elapsed
PS C:\> Get-EventSubscriber
SubscriptionId   : 4
SourceObject     : System.Timers.Timer
EventName        : Elapsed
SourceIdentifier : Timer.Elapsed
Action           :
HandlerDelegate  :
SupportEvent     : False
ForwardEvent     : False

In diesem Beispiel wird ein Get-EventSubscriber-Befehl verwendet, um den Ereignisabonnent für ein Timerereignis abzurufen.

Der erste Befehl verwendet das New-Object-Cmdlet, um eine Instanz eines Zeitgeberobjekts zu erstellen. Das neue Timerobjekt wird in der variablen $Timer gespeichert.

Der zweite Befehl verwendet das Get-Member-Cmdlet, um die für Zeitgeberobjekte verfügbaren Ereignisse anzuzeigen. Der Befehl verwendet den Type-Parameter des Cmdlets Get-Member mit dem Wert Event.

Der dritte Befehl verwendet das Register-ObjectEvent-Cmdlet, um sich für das Elapsed-Ereignis des Zeitgeberobjekts zu registrieren.

Der vierte Befehl verwendet das Cmdlet Get-EventSubscriber , um den Ereignisabonnent für das Elapsed-Ereignis abzurufen.

Beispiel 2: Verwenden des dynamischen Moduls in PSEventJob in der Action-Eigenschaft des Ereignisabonnents

PS C:\> $Timer = New-Object Timers.Timer
PS C:\> $Timer.Interval = 500
PS C:\> Register-ObjectEvent -InputObject $Timer -EventName Elapsed -SourceIdentifier Timer.Random -Action { $Random = Get-Random -Min 0 -Max 100 }

Id  Name           State      HasMoreData  Location  Command
--  ----           -----      -----------  --------  -------
3   Timer.Random   NotStarted False                  $Random = Get-Random ...

PS C:\> $Timer.Enabled = $True
PS C:\> $Subscriber = Get-EventSubscriber -SourceIdentifier Timer.Random
PS C:\> ($Subscriber.action).gettype().fullname
System.Management.Automation.PSEventJob
PS C:\> $Subscriber.action | Format-List -Property *

State         : Running
Module        : __DynamicModule_6b5cbe82-d634-41d1-ae5e-ad7fe8d57fe0
StatusMessage :
HasMoreData   : True
Location      :
Command       : $random = Get-Random -Min 0 -Max 100
JobStateInfo  : Running
Finished      : System.Threading.ManualResetEvent
InstanceId    : 88944290-133d-4b44-8752-f901bd8012e2
Id            : 1
Name          : Timer.Random
ChildJobs     : {}
...

PS C:\> & $Subscriber.action.module {$Random}
96
PS C:\> & $Subscriber.action.module {$Random}
23

In diesem Beispiel wird gezeigt, wie Sie das dynamische Modul im PSEventJob-Objekt in der Action-Eigenschaft des Ereignisabonnents verwenden.

Der erste Befehl verwendet das New-Object-Cmdlet, um ein Zeitgeberobjekt zu erstellen. Der zweite Befehl legt das Intervall des Zeitgebers auf 500 (Millisekunden) fest.

Der dritte Befehl verwendet das Register-ObjectEvent-Cmdlet, um sich für das Elapsed-Ereignis des Zeitgeberobjekts zu registrieren. Der Befehl enthält eine Aktion zur Behandlung des Ereignisses. Wenn das Zeitgeberintervall abläuft, wird ein Ereignis ausgelöst, und die Befehle in der Aktion werden ausgeführt. In diesem Fall generiert das Cmdlet Get-Random eine Zufallszahl zwischen 0 und 100 und speichert sie in der variablen $Random. Der Quellbezeichner des Ereignisses ist Timer.Random.

Wenn Sie einen Action-Parameter in einem Register-ObjectEvent-Befehl verwenden, gibt der Befehl ein PSEventJob-Objekt zurück, das die Aktion darstellt.

Der vierte Befehl aktiviert den Zeitgeber.

Der fünfte Befehl verwendet das Cmdlet Get-EventSubscriber , um den Ereignisabonnent des Timer.Random-Ereignisses abzurufen. Das Ereignisabonnentobjekt wird in der variablen $Subscriber gespeichert.

Der sechste Befehl zeigt, dass die Action-Eigenschaft des Ereignisabonnentobjekts ein PSEventJob-Objekt enthält. Tatsächlich enthält es dasselbe PSEventJob-Objekt , das vom Befehl Register-ObjectEvent zurückgegeben wurde.

Der siebte Befehl verwendet das Cmdlet Format-List, um alle Eigenschaften des PSEventJob-Objekts in der Action-Eigenschaft in einer Liste anzuzeigen. Das Ergebnis zeigt, dass das PSEventJob-Objekt über eine Module-Eigenschaft verfügt, die ein dynamisches Skriptmodul enthält, das die Aktion implementiert.

Die restlichen Befehle verwenden den Aufrufoperator (&), um den Befehl im Modul aufzurufen und den Wert der variablen $Random anzuzeigen. Mit dem Aufrufoperator können Sie einen beliebigen Befehl in einem Modul aufrufen, einschließlich nicht exportierter Befehle. In diesem Fall zeigen die Befehle die Zufallszahl an, die bei Eintritt des Elapsed-Ereignisses generiert wird.

Weitere Informationen zu Modulen finden Sie unter about_Modules.

Parameter

-Force

Gibt an, dass dieses Cmdlet alle Ereignisabonnenten abruft, einschließlich Abonnenten für Ereignisse, die mithilfe des SupportEvent-Parameters von Register-ObjectEvent, Register-WmiEvent und Register-EngineEvent ausgeblendet werden.

Type:SwitchParameter
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SourceIdentifier

Gibt den Wert der SourceIdentifier-Eigenschaft an, der nur die Ereignisabonnenten abruft. Standardmäßig ruft Get-EventSubscriber alle Ereignisabonnenten in der Sitzung ab. Platzhalter sind nicht zulässig. Bei diesem Parameter wird die Groß-/Kleinschreibung beachtet.

Type:String
Position:0
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-SubscriptionId

Gibt den Abonnementbezeichner an, den dieses Cmdlet erhält. Standardmäßig ruft Get-EventSubscriber alle Ereignisabonnenten in der Sitzung ab.

Type:Int32
Aliases:Id
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

Eingaben

None

Eingaben können nicht an dieses Cmdlet weitergereicht werden.

Ausgaben

PSEventSubscriber

Get-EventSubscriber gibt ein Objekt zurück, das jeden Ereignisabonnent darstellt.

Hinweise

  • Das New-Event-Cmdlet, durch das ein benutzerdefiniertes Ereignis erstellt wird, generiert keinen Abonnenten. Daher findet das Cmdlet Get-EventSubscriber kein Abonnentenobjekt für diese Ereignisse. Wenn Sie jedoch das Cmdlet Register-EngineEvent verwenden, um ein benutzerdefiniertes Ereignis zu abonnieren (um das Ereignis weiterzuleiten oder eine Aktion anzugeben), findet Get-EventSubscriber den Abonnenten, den Register-EngineEvent generiert.

    Ereignisse, Ereignisabonnements und die Ereigniswarteschlange sind nur in der aktuellen Sitzung vorhanden. Wenn Sie die aktuelle Sitzung schließen, wird die Ereigniswarteschlange verworfen, und das Ereignisabonnement wird abgebrochen.