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


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 для отображения событий, доступных для объектов таймера. Команда использует параметр 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)

$params = @{
    InputObject = $Timer
    EventName = 'Elapsed'
    SourceIdentifier = 'Timer.Elapsed'
}
Register-ObjectEvent @params
Get-EventSubscriber

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

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

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

Пример 2. Использование динамического модуля в PSEventJob в свойстве Action подписчика события

В этом примере показано, как использовать динамический модуль в объекте PSEventJob 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

Указывает, что этот командлет получает всех подписчиков событий, включая подписчиков для событий, скрытых с помощью параметра SupportEventRegister-ObjectEvent, 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 создает.

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