Поиск по сайту:

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.

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