Get-EventSubscriber (Microsoft.PowerShell.Utility)
Get-EventSubscriber
- Модуль:
- Microsoft.PowerShell.Utility
Получает подписчиков событий в текущем сеансе.
Синтаксис
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)
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Третья команда использует командлет Register-ObjectEvent для регистрации события Elapsed в объекте таймера.
Четвертая команда использует командлет Get-EventSubscriber, чтобы получить подписчика на событие Elapsed.
Пример 2. Использование динамического модуля в PSEventJob в свойстве Action подписчика событий.
В этом примере показано, как использовать динамический модуль в объекте 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 для регистрации события Elapsed объекта таймера. Команда включает действие, которое обрабатывает событие. По истечении интервала таймера возникает событие и выполняются команды действия. В этом случае командлет 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
Указывает, что этот командлет получает всех подписчиков событий, включая подписчиков на события, которые скрыты с помощью параметра SupportEvent Register-ObjectEvent, Register-WmiEvent и Register-EngineEvent.
- Тип :
SwitchParameter
- Позиция:
1
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-SourceIdentifier
Указывает значение свойства SourceIdentifier, которое получает только подписчиков событий. По умолчанию Get-EventSubscriber получает всех подписчиков событий в сеансе. Подстановочные знаки не допускаются. Этот параметр чувствителен к регистру.
- Тип :
String
- Позиция:
0
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
True
- Принимайте подстановочные знаки:
False
-SubscriptionId
Указывает идентификатор подписки, который получает этот командлет. По умолчанию Get-EventSubscriber получает всех подписчиков событий в сеансе.
- Тип :
Int32
- Псевдонимы:
Id
- Позиция:
0
- Значение по умолчанию:
None
- Необходимый:
True
- Примите ввод конвейера:
True
- Принимайте подстановочные знаки:
False
Входы
Нет
Вы не можете передавать объекты в этот командлет.
Выходы
PSEventSubscriber
Этот командлет возвращает объект PSEventSubscriber для каждого подписчика событий.
Примечания
Командлет New-Event, создающий пользовательское событие, не создает подписчика. Таким образом, командлет Get-EventSubscriber не найдет объект подписчика для этих событий. Однако если вы используете командлет Register-EngineEvent для подписки на пользовательское событие (чтобы переслать событие или указать действие), Get-EventSubscriber найдет подписчик, который генерирует Register-EngineEvent.
События, подписки на события и очередь событий существуют только в текущем сеансе. Если вы закроете текущий сеанс, очередь событий будет удалена, а подписка на события будет отменена.