Get-EventSubscriber
Ottiene i sottoscrittori di eventi nella sessione corrente.
Sintassi
Get-EventSubscriber
[[-SourceIdentifier] <String>]
[-Force]
[<CommonParameters>]
Get-EventSubscriber
[-SubscriptionId] <Int32>
[-Force]
[<CommonParameters>]
Descrizione
Il Get-EventSubscriber
cmdlet ottiene i sottoscrittori di eventi nella sessione corrente.
Quando si sottoscrive un evento usando un cmdlet Register event, viene aggiunto un sottoscrittore di eventi alla sessione di Windows PowerShell e gli eventi sottoscritti vengono aggiunti alla coda degli eventi ogni volta che vengono generati. Per annullare una sottoscrizione di eventi, eliminare il sottoscrittore di eventi usando il Unregister-Event
cmdlet .
Esempio
Esempio 1: Ottenere il sottoscrittore di eventi per un evento timer
In questo esempio viene usato un Get-EventSubscriber
comando per ottenere il sottoscrittore di eventi per un evento timer.
Il primo comando usa il New-Object
cmdlet per creare un'istanza di un oggetto timer. Salva il nuovo oggetto timer nella $Timer
variabile .
Il secondo comando usa il Get-Member
cmdlet per visualizzare gli eventi disponibili per gli oggetti timer. Il comando usa il parametro Type del Get-Member
cmdlet con un valore Event.
$Timer = New-Object Timers.Timer
$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)
Register-ObjectEvent -InputObject $Timer -EventName Elapsed -SourceIdentifier Timer.Elapsed
Get-EventSubscriber
SubscriptionId : 4
SourceObject : System.Timers.Timer
EventName : Elapsed
SourceIdentifier : Timer.Elapsed
Action :
HandlerDelegate :
SupportEvent : False
ForwardEvent : False
Il terzo comando usa il Register-ObjectEvent
cmdlet per eseguire la registrazione per l'evento Elapsed nell'oggetto timer.
Il quarto comando usa il Get-EventSubscriber
cmdlet per ottenere il sottoscrittore di eventi per l'evento trascorso .
Esempio 2: Usare il modulo dinamico in PSEventJob nella proprietà Action del sottoscrittore di eventi
In questo esempio viene illustrato come utilizzare il modulo dinamico nell'oggetto PSEventJob nella proprietà Action del sottoscrittore di eventi.
Il primo comando usa il New-Object
cmdlet per creare un oggetto timer. Il secondo comando imposta l'intervallo del timer su 500 (millisecondi).
$Timer = New-Object Timers.Timer
$Timer.Interval = 500
$params = @{
InputObject = $Timer
EventName = 'Elapsed'
SourceIdentifier = 'Timer.Random'
Action = { $Random = Get-Random -Min 0 -Max 100 }
}
Register-ObjectEvent @params
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
3 Timer.Random NotStarted False $Random = Get-Random ...
$Timer.Enabled = $True
$Subscriber = Get-EventSubscriber -SourceIdentifier Timer.Random
($Subscriber.action).gettype().fullname
System.Management.Automation.PSEventJob
$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 : {}
...
& $Subscriber.action.module {$Random}
Il terzo comando usa il Register-ObjectEvent
cmdlet per registrare l'evento Elapsed dell'oggetto timer. Il comando include un'azione che gestisce l'evento. Ogni volta che l'intervallo del timer scade, viene generato un evento e i comandi nell'azione vengono eseguiti. In questo caso, il Get-Random
cmdlet genera un numero casuale compreso tra 0 e 100 e lo salva nella $Random
variabile. L'identificatore di origine dell'evento è Timer.Random.
Quando si usa un parametro Action in un Register-ObjectEvent
comando, il comando restituisce un oggetto PSEventJob che rappresenta l'azione.
Il quarto comando abilita il timer.
Il quinto comando usa il Get-EventSubscriber
cmdlet per ottenere il sottoscrittore dell'evento Timer.Random . Salva l'oggetto sottoscrittore eventi nella $Subscriber
variabile .
Il sesto comando mostra che la proprietà Action dell'oggetto sottoscrittore eventi contiene un oggetto PSEventJob . Contiene infatti lo stesso oggetto PSEventJob restituito dal Register-ObjectEvent
comando.
Il settimo comando usa il Format-List
cmdlet per visualizzare tutte le proprietà dell'oggetto PSEventJob nella proprietà Action di un elenco. Il risultato rivela che l'oggetto PSEventJob ha una proprietà Module che contiene un modulo script dinamico che implementa l'azione.
I comandi rimanenti usano 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 un 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 usando il parametro SupportEvent di Register-ObjectEvent
, Register-WmiEvent
e Register-EngineEvent
.
Type: | SwitchParameter |
Position: | 1 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SourceIdentifier
Specifica il valore della proprietà SourceIdentifier che ottiene solo i sottoscrittori di eventi. 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.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-SubscriptionId
Specifica l'identificatore della sottoscrizione che ottiene questo cmdlet. Per impostazione predefinita, Get-EventSubscriber
ottiene tutti i sottoscrittori di eventi nella sessione.
Type: | Int32 |
Aliases: | Id |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Input
None
Non è possibile inviare tramite pipe oggetti a questo cmdlet.
Output
Questo cmdlet restituisce un oggetto PSEventSubscriber per ogni sottoscrittore di eventi.
Note
Il New-Event
cmdlet , che crea un evento personalizzato, non genera un sottoscrittore. Di conseguenza, il Get-EventSubscriber
cmdlet non troverà un oggetto sottoscrittore per questi eventi. Tuttavia, se si usa il Register-EngineEvent
cmdlet per sottoscrivere un evento personalizzato (per inoltrare l'evento o per specificare un'azione), Get-EventSubscriber
il sottoscrittore che Register-EngineEvent
genera.
Gli eventi, le sottoscrizioni di eventi e la coda degli eventi esistono solo nella sessione corrente. Se si chiude la sessione corrente, la coda degli eventi viene rimossa e la sottoscrizione dell'evento viene annullata.