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 di eventi 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 usando il cmdlet Unregister-Event.
Esempio
Esempio 1: Ottenere il sottoscrittore di eventi per un evento timer
Questo esempio usa un comando Get-EventSubscriber per ottenere il sottoscrittore di eventi per un evento timer.
Il primo comando usa il cmdlet New-Object per creare un'istanza di un oggetto timer. Salva il nuovo oggetto timer nella variabile $Timer.
Il secondo comando usa il cmdlet Get-Member per visualizzare gli eventi disponibili per gli oggetti timer. Il comando usa il parametro Type del cmdlet Get-Member con il 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)
$params = @{
InputObject = $Timer
EventName = 'Elapsed'
SourceIdentifier = 'Timer.Elapsed'
}
Register-ObjectEvent @params
Get-EventSubscriber
SubscriptionId : 4
SourceObject : System.Timers.Timer
EventName : Elapsed
SourceIdentifier : Timer.Elapsed
Action :
HandlerDelegate :
SupportEvent : False
ForwardEvent : False
Il terzo comando usa il cmdlet Register-ObjectEvent per eseguire la registrazione per l'evento trascorso sull'oggetto timer.
Il quarto comando usa il cmdlet Get-EventSubscriber 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 dell'evento.
Il primo comando usa il cmdlet New-Object 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 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 usa 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 usa il cmdlet Get-EventSubscriber per ottenere il sottoscrittore dell'evento Timer.Random. Salva l'oggetto sottoscrittore eventi nella variabile $Subscriber.
Il sesto comando mostra che la proprietà Action dell'oggetto sottoscrittore eventi contiene un oggetto PSEventJob. Contiene infatti lo stesso oggetto PSEventJob restituito dal comando Register-ObjectEvent.
Il settimo comando usa il cmdlet Format-List 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 di 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 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.
Esempio 3: Ottenere sottoscrittori di eventi nascosti
In questo esempio viene registrato un sottoscrittore di eventi per l'evento di PowerShell.Exiting. La sottoscrizione viene registrata usando il parametro SupportEvent, che nasconde il sottoscrittore dell'evento dall'output predefinito del cmdlet Get-EventSubscriber. È necessario utilizzare il parametro Force per ottenere tutti i sottoscrittori di eventi, inclusi i sottoscrittori nascosti.
Register-EngineEvent -SourceIdentifier PowerShell.Exiting -SupportEvent -Action {
Get-History | Export-Clixml D:\temp\history.clixml
}
Get-EventSubscriber # No output - must use -Force
Get-EventSubscriber -Force
SubscriptionId : 1
SourceObject :
EventName :
SourceIdentifier : PowerShell.Exiting
Action : System.Management.Automation.PSEventJob
HandlerDelegate :
SupportEvent : True
ForwardEvent : False
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-WmiEvente 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 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.
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
Gli oggetti non possono essere inviati tramite pipe a questo cmdlet.
Output
PSEventSubscriber
Questo cmdlet restituisce un PSEventSubscriber oggetto per ogni sottoscrittore di eventi.
Note
Il cmdlet New-Event, che crea un evento personalizzato, non genera un sottoscrittore. Pertanto, il cmdlet Get-EventSubscriber non troverà un oggetto sottoscrittore per questi eventi. Tuttavia, se si usa il cmdlet Register-EngineEvent per sottoscrivere un evento personalizzato (per inoltrare l'evento o specificare un'azione), Get-EventSubscriber troverà il sottoscrittore generato 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.