Поделиться через


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-ObjectEventSupportEvent , 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

Этот командлет возвращает объект PSEventSubscriber для каждого подписчика событий.

Примечания

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

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