Condividi tramite


Get-EventSubscriber

Ottiene i sottoscrittori di eventi nella sessione corrente.

Sintassi

BySource (Impostazione predefinita)

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

ById

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

Descrizione

Il cmdlet Get-EventSubscriber ottiene i sottoscrittori dell'evento nella sessione corrente.

Quando si sottoscrive un evento usando un cmdlet di evento Register, un sottoscrittore di eventi viene aggiunto alla sessione di Windows PowerShell e gli eventi a cui è stata effettuata la sottoscrizione vengono aggiunti alla coda di eventi ogni volta che vengono generati. Per annullare una sottoscrizione di eventi, eliminare il sottoscrittore di eventi utilizzando il cmdlet Unregister-Event.

Esempio

Esempio 1: Ottenere il sottoscrittore di eventi per un evento timer

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 questo esempio viene utilizzato un comando Get-EventSubscriber per ottenere il sottoscrittore di eventi per un evento timer.

Il primo comando utilizza il cmdlet New-Object per creare un'istanza di un oggetto timer. Salva il nuovo oggetto timer nella variabile $Timer.

Il secondo comando utilizza il cmdlet Get-Member per visualizzare gli eventi disponibili per gli oggetti timer. Il comando utilizza il parametro Type del cmdlet Get-Member con il valore Event.

Il terzo comando utilizza il cmdlet Register-ObjectEvent per la registrazione dell'evento Elapsed nell'oggetto timer.

Il quarto comando utilizza il cmdlet Get-EventSubscriber per ottenere il sottoscrittore di eventi per l'evento Elapsed.

Esempio 2: Usare il modulo dinamico in PSEventJob nella proprietà Action del sottoscrittore di eventi

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 questo esempio viene illustrato come utilizzare il modulo dinamico nell'oggetto PSEventJob nella proprietà Action del sottoscrittore di eventi.

Il primo comando utilizza il cmdlet New-Object per creare un oggetto timer. Il secondo comando imposta l'intervallo del timer su 500 (millisecondi).

Il terzo comando utilizza il cmdlet Register-ObjectEvent per registrare l'evento Elapsed dell'oggetto timer. Il comando include un'azione che gestisce l'evento. Ogni volta che viene trascorso l'intervallo del timer, viene generato un evento e i comandi nell'esecuzione dell'azione. In questo caso, il cmdlet Get-Random genera un numero casuale compreso tra 0 e 100 e lo salva nella variabile $Random. L'identificatore di origine dell'evento è Timer.Random.

Quando si utilizza un parametro Action in un comando Register-ObjectEvent , il comando restituisce un oggetto PSEventJob che rappresenta l'azione.

Il quarto comando abilita il timer.

Il quinto comando utilizza il cmdlet Get-EventSubscriber per ottenere il sottoscrittore dell'evento Timer.Random. Salva l'oggetto sottoscrittore dell'evento nella variabile $Subscriber.

Il sesto comando mostra che la proprietà Action dell'oggetto sottoscrittore eventi contiene un oggetto PSEventJob. In effetti, contiene lo stesso oggetto PSEventJob restituito dal comando Register-ObjectEvent .

Il settimo comando utilizza il cmdlet Format-List per visualizzare tutte le proprietà dell'oggetto PSEventJob nella proprietà Action in un elenco. Il risultato rivela che l'oggetto PSEventJob ha una proprietà Module che contiene un modulo di script dinamico che implementa l'azione.

I comandi rimanenti utilizzano l'operatore di chiamata (&) per richiamare il comando nel modulo e visualizzare il valore della variabile $Random. È possibile usare l'operatore di chiamata per richiamare qualsiasi comando in un modulo, inclusi i comandi che non vengono esportati. In questo caso, i comandi mostrano il numero casuale generato quando si verifica l'evento Elapsed.

Per altre informazioni sui moduli, vedere about_Modules.

Parametri

-Force

Indica che questo cmdlet ottiene tutti i sottoscrittori di eventi, inclusi i sottoscrittori per gli eventi nascosti utilizzando il parametro SupportEvent di Register-ObjectEvent, Register-WmiEvent e Register-EngineEvent.

Proprietà dei parametri

Tipo:SwitchParameter
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

(All)
Posizione:1
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-SourceIdentifier

Specifica il valore della proprietà SourceIdentifier che ottiene solo i sottoscrittori dell'evento. Per impostazione predefinita, Get-EventSubscriber ottiene tutti i sottoscrittori di eventi nella sessione. I caratteri jolly non sono consentiti. In questo parametro viene fatta distinzione tra maiuscole e minuscole.

Proprietà dei parametri

Tipo:String
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

BySource
Posizione:0
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:True
Valore dagli argomenti rimanenti:False

-SubscriptionId

Specifica l'identificatore della sottoscrizione che ottiene questo cmdlet. Per impostazione predefinita, Get-EventSubscriber ottiene tutti i sottoscrittori di eventi nella sessione.

Proprietà dei parametri

Tipo:Int32
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False
Alias:id

Set di parametri

ById
Posizione:0
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:True
Valore dagli argomenti rimanenti:False

CommonParameters

Questo cmdlet supporta i parametri comuni: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Per altre informazioni, vedi about_CommonParameters.

Input

None

Non è possibile inviare tramite pipe l'input a questo cmdlet.

Output

PSEventSubscriber

Get-EventSubscriber restituisce un oggetto che rappresenta ogni sottoscrittore di eventi.

Note

  • Il cmdlet New-Event, che crea un evento personalizzato, non genera un sottoscrittore. Di conseguenza, il cmdlet Get-EventSubscriber non troverà un oggetto sottoscrittore per questi eventi. Tuttavia, se si utilizza il cmdlet Register-EngineEvent per sottoscrivere un evento personalizzato (al fine di inoltrare l'evento o specificare un'azione), Get-EventSubscriber troverà il sottoscrittore generato da Register-EngineEvent .

    Gli eventi, le sottoscrizioni di eventi e la coda di eventi esistono solo nella sessione corrente. Se si chiude la sessione corrente, la coda di eventi viene eliminata e la sottoscrizione di eventi viene annullata.