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
командлет для отображения событий, доступных для объектов таймера. Команда использует параметр Get-Member
Type командлета со значением 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
командлет для получения подписчика события для события, прошедшего по истечении времени .
Пример 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
командлет для регистрации события прошедшего времени объекта таймера. Она содержит действие, обрабатывающее событие. Когда интервал времени таймера истекает, появляется событие и выполняются команды, содержащиеся в действии. В этом случае 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
Указывает, что этот командлет получает всех подписчиков событий, включая подписчиков для событий, скрытых с помощью параметра Register-ObjectEvent
SupportEvent , 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
создает.
События, подписки на события и очередь событий существуют только в текущем сеансе. Если закрыть текущий сеанс, очередь событий удаляется, а подписка на событие отменяется.
Связанные ссылки
PowerShell