Get-EventSubscriber
Возвращает подписчиков событий в текущем сеансе.
Синтаксис
Get-EventSubscriber
[[-SourceIdentifier] <String>]
[-Force]
[<CommonParameters>]
Get-EventSubscriber
[-SubscriptionId] <Int32>
[-Force]
[<CommonParameters>]
Описание
Командлет Get-EventSubscriber
получает подписчиков событий в текущем сеансе.
При подписке на событие с помощью командлета регистрации подписчик события добавляется в сеанс Windows PowerShell, а события, к которым вы подписаны, добавляются в очередь событий всякий раз, когда они возникают. Чтобы отменить подписку на событие, удалите подписчик события с помощью командлета Unregister-Event
.
Примеры
Пример 1. Получение подписчика события для события таймера
В этом примере используется команда Get-EventSubscriber
для получения подписчика события для события таймера.
Первая команда использует командлет New-Object
для создания экземпляра объекта таймера. Он сохраняет новый объект таймера в переменной $Timer
.
Вторая команда использует командлет Get-Member
для отображения событий, доступных для объектов таймера. Команда использует параметр Type командлета Get-Member
со значением 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
Третья команда использует командлет Register-ObjectEvent
для регистрации события в объекте таймера.
Четвертая команда использует командлет Get-EventSubscriber
для получения подписчика события для события .
Пример 2. Использование динамического модуля в PSEventJob в свойстве Action подписчика события
В этом примере показано, как использовать динамический модуль в объекте PSEventJob PSEventJob в свойстве Action подписчика событий.
Первая команда использует командлет New-Object
для создания объекта таймера. Вторая команда задает интервал таймера до 500 (миллисекунд).
$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}
Третья команда использует командлет Register-ObjectEvent
для регистрации события прошедшего времени объекта таймера. Команда включает действие, обрабатывающее событие. Каждый раз, когда интервал таймера истекает, вызывается событие и команды в выполнении действия. В этом случае командлет Get-Random
создает случайное число от 0 до 100 и сохраняет его в переменной $Random
. Исходный идентификатор события — Timer.Random.
При использовании параметра Action в команде Register-ObjectEvent
команда возвращает объект PSEventJob, представляющий действие.
Четвертая команда включает таймер.
Пятая команда использует командлет Get-EventSubscriber
для получения подписчика события Timer.Random. Он сохраняет объект подписчика события в переменной $Subscriber
.
Шестая команда показывает, что свойство Action объекта подписчика события содержит объект PSEventJob. На самом деле он содержит тот же объект PSEventJob, что возвращена команда Register-ObjectEvent
.
Седьмая команда использует командлет Format-List
для отображения всех свойств объекта PSEventJob в свойстве Action в списке. Результат показывает, что объект PSEventJob имеет свойство Module, содержащее модуль динамического скрипта, реализующий действие.
Остальные команды используют оператор вызова (&
) для вызова команды в модуле и отображения значения переменной $Random. Оператор вызова можно использовать для вызова любой команды в модуле, включая команды, которые не экспортируются. В этом случае команды показывают случайное число, создаваемое при возникновении события elapsed.
Дополнительные сведения о модулях см. в about_Modules.
Пример 3. Получение скрытых подписчиков событий
В этом примере регистрируется подписчик события для события PowerShell.Exiting. Подписка регистрируется с помощью параметра SupportEvent, который скрывает подписчик события от выходных данных по умолчанию командлета Get-EventSubscriber
. Необходимо использовать параметр Force для получения всех подписчиков событий, включая скрытых подписчиков.
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
Параметры
-Force
Указывает, что этот командлет получает всех подписчиков событий, включая подписчиков для событий, скрытых с помощью параметра SupportEventRegister-ObjectEvent
, Register-WmiEvent
и Register-EngineEvent
.
Тип: | SwitchParameter |
Position: | 1 |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
-SourceIdentifier
Указывает значение свойства SourceIdentifier, которое получает только подписчиков событий. По умолчанию Get-EventSubscriber
получает всех подписчиков событий в сеансе. Подстановочные знаки запрещены. Этот параметр учитывает регистр.
Тип: | String |
Position: | 0 |
Default value: | None |
Обязательно: | False |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
-SubscriptionId
Указывает идентификатор подписки, который получает этот командлет. По умолчанию Get-EventSubscriber
получает всех подписчиков событий в сеансе.
Тип: | Int32 |
Aliases: | Id |
Position: | 0 |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | True |
Принять подстановочные знаки: | False |
Входные данные
None
Невозможно передать объекты в этот командлет.
Выходные данные
Этот командлет возвращает объект PSEventSubscriber для каждого подписчика событий.
Примечания
Командлет New-Event
, который создает настраиваемое событие, не создает подписчика. Поэтому командлет Get-EventSubscriber
не найдет объект подписчика для этих событий. Однако если вы используете командлет Register-EngineEvent
для подписки на настраиваемое событие (для пересылки события или указания действия), Get-EventSubscriber
найдет подписчика, который Register-EngineEvent
создает.
События, подписки на события и очередь событий существуют только в текущем сеансе. При закрытии текущего сеанса очередь событий удаляется, а подписка на события отменяется.