Получает подписчики на события в текущем сеансе.

Синтаксис

Get-EventSubscriber [-SubscriptionId] <int> [-Force] [<CommonParameters>]

Get-EventSubscriber [[-SourceIdentifier] <string>] [-Force] [<CommonParameters>]

Описание

Командлет Get-EventSubscriber получает подписчики на события в текущем сеансе.

При подписке на событие с помощью командлета регистрации событий в сеанс Windows PowerShell добавляется подписчик на событие, а события, на которые подписался пользователь, добавляются в очередь событий по мере возникновения. Чтобы отменить подписку на событие, необходимо удалить подписчик с помощью командлета Unregister-Event.

Параметры

-Force

Получает все подписчики на события, включая подписчики на события, которые скрыты с помощью параметра SupportEvent командлетов Register-ObjectEvent, Register-WmiEvent и Register-EngineEvent.

Обязательно?

false

Позиция?

2

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-SourceIdentifier <string>

Получает только подписчики на события с заданным значением свойства SourceIdentifier. По умолчанию командлет Get-EventSubscriber получает все подписчики на события в сеансе. Подстановочные знаки запрещены. Этот параметр указывается с учетом регистра.

Обязательно?

false

Позиция?

1

Значение по умолчанию

All event subscribers

Принимать входные данные из конвейера?

true (ByPropertyName)

Принимать подстановочные знаки?

false

-SubscriptionId <int>

Получает только заданный идентификатор подписки. По умолчанию командлет Get-EventSubscriber получает все подписчики на события в сеансе.

Обязательно?

true

Позиция?

1

Значение по умолчанию

нет

Принимать входные данные из конвейера?

true (ByPropertyName)

Принимать подстановочные знаки?

false

<CommonParameters>

Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.

Ввод и вывод

Входным типом является тип объектов, которые можно передавать командлету по конвейеру. Возвращаемым типом является тип объектов, возвращаемых командлетом.

Входные данные

None

Передать входные данные этому командлету по конвейеру невозможно.

Выходные данные

System.Management.Automation.PSEventSubscriber

Командлет Get-EventSubscriber возвращает объект, представляющий каждый подписчик на события.

Примечания

Командлет New-Event, создающий пользовательское событие, не создает подписчик. Поэтому командлет Get-EventSubscriber не сможет обнаружить объект подписчика для таких событий. Но если подписаться на пользовательское событие с помощью командлета Register-EngineEvent (чтобы перенаправить событие или задать действие), командлет Get-EventSubscriber обнаружит подписчик, созданный командлетом Register-EngineEvent.

События, подписки на события и очередь событий существуют только в рамках текущего сеанса. Если завершить текущий сеанс, очередь событий будет очищена и подписка на события будет отменена.

Пример 1

C:\PS>$timer = New-Object Timers.Timer 

C:\PS> $timer | Get-Member -Type Event 

C:\PS> Register-ObjectEvent -inputObject $timer -EventName Elapsed -SourceIdentifier Timer.Elapsed

C:\PS> Get-EventSubscriber

C:\PS> $timer = New-Object Timers.Timer 

C:\PS> $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)

C:\PS> Register-ObjectEvent -InputObject $timer -EventName Elapsed -SourceIdentifier Timer.Elapsed

C:\PS> Get-EventSubscriber 

SubscriptionId   : 4 
SourceObject     : System.Timers.Timer 
EventName        : Elapsed 
SourceIdentifier : Timer.Elapsed 
Action           : 
HandlerDelegate  : 
SupportEvent     : False 
ForwardEvent     : False

Описание
-----------
В этом примере используется команда Get-EventSubscriber для получения подписчика на событие таймера. 

Первая команда создает экземпляр объекта таймера с помощью командлета New-Object. Новый объект таймера сохраняется в переменной $timer.

Вторая команда отображает события, доступные для объектов таймера, с помощью командлета Get-Member. В этой команде используется параметр Type командлета Get-Member со значением Event.

Третья команда регистрирует событие Elapsed объекта таймера с помощью командлета Register-ObjectEvent.

Четвертая команда использует командлет Get-EventSubscriber для получения подписчика на событие Elapsed.






Пример 2

C:\PS>$timer  = New-Object Timers.Timer

C:\PS> $timer.Interval = 500

C:\PS> Register-ObjectEvent -inputObject $timer -eventName Elapsed -sourceIdentifier Timer.Random -Action { $random = Get-Random -Min 0 -Max 100 }

Id  Name           State      HasMoreData  Location  Command
--  ----           -----      -----------  --------  -------
3   Timer.Random   NotStarted False                  $random = Get-Random ...


C:\PS> $timer.Enabled = $true

C:\PS> $subscriber = Get-EventSubcriber -sourceIdentifer Timer.Random

C:\PS> ($subscriber.action).gettype().fullname
PSEventJob

C:\PS> $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     : {}
...

C:\PS> & $subscriber.action.module {$random}
96

C:\PS> & $subscriber.action.module {$random}
23

Описание
-----------
В этом примере показано использование динамического модуля в объекте PSEventJob свойства Action подписчика на событие.

Первая команда с помощью командлета New-Object создает объект таймера. Вторая команда устанавливает интервал времени таймера равным 500 (миллисекундам).

Третья команда регистрирует событие Elapsed объекта таймера с помощью командлета 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.






См. также




Содержание