Создает подписку на события, создаваемые объектами Microsoft .NET Framework.

Синтаксис

Register-ObjectEvent [-InputObject] <psobject> [-EventName] <string> [[-SourceIdentifier] <string>] [[-Действие] <scriptblock>] [-Forward] [-MessageData <psobject>] [-SupportEvent] [<CommonParameters>]

Описание

Командлет Register-ObjectEvent создает подписку на события, создаваемые объектами .NET Framework на локальном или удаленном компьютере.

При возникновении события, для которого создана подписка, это событие добавляется в очередь событий сеанса. Чтобы получить события из очереди событий, используйте командлет Get-Event.

С помощью параметров командлета Register-ObjectEvent можно задавать значения свойств событий, которые позволяют идентифицировать события в очереди. Кроме того, можно использовать параметр Action, чтобы определить действия, выполняемые после возникновения события, для которого создана подписка, или параметр Forward для перенаправления удаленных событий в очередь событий в локальном сеансе.

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

Параметры

-Действие <scriptblock>

Задает команды для обработки событий. Когда происходит событие, вместо передачи события в очередь событий выполняются эти команды. Чтобы создать блок скрипта, заключите команды в фигурные скобки ( { } ).

Значение параметра Action может включать автоматические переменные $Event, $EventSubscriber, $Sender, $SourceEventArgs и $SourceArgs, предоставляющие информацию о событии в блок скрипта Action. Дополнительные сведения см. в разделе about_Automatic_Variables.

Если задано действие, командлет Register-ObjectEvent возвращает объект задания события, представляющего это действие. Командлеты Job позволяют управлять заданием события.

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

false

Позиция?

102

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

None.

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

false

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

false

-EventName <string>

Задает событие, для которого создается подписка. Введите имя события. Это обязательный параметр.

Значение этого параметра не равно имени, выбранному при создании подписки на событие. Это имя события, предоставляемое объектом .NET Framework. Например, у класса ManagementEventWatcher имеются события "EventArrived" и "Stopped." Чтобы получить имя события, используйте командлет Get-Member.

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

true

Позиция?

2

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

нет

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

false

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

false

-Forward

Отправляет события по данной подписке удаленному сеансу. Этот параметр используется при регистрации для получения событий на удаленном компьютере или в удаленном сеансе.

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

false

Позиция?

named

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

False

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

false

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

false

-InputObject <psobject>

Задает объект .NET Framework, который создает события. Укажите переменную, содержащую объект, либо введите команду или выражение, получающие его. Это обязательный параметр.

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

true

Позиция?

1

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

нет

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

false

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

false

-MessageData <psobject>

Задает любые дополнительные данные, которые следует связать с этой подпиской на события. Значение этого параметра присваивается свойству MessageData для всех событий, связанных с данной подпиской.

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

false

Позиция?

named

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

нет

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

false

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

false

-SourceIdentifier <string>

Задает имя, выбранное для подписки. Выбираемое имя должно быть уникальным в пределах текущего сеанса. По умолчанию используется значение GUID, назначенное Windows PowerShell.

Значение этого параметра присваивается свойству SourceIdentifier объекта подписчика и объектов событий, связанных с данной подпиской.

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

false

Позиция?

101

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

GUID

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

false

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

false

-SupportEvent

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

Чтобы просмотреть или отменить подписку, созданную с использованием параметра SupportEvent, воспользуйтесь параметром Force командлетов Get-EventSubscriber и Unregister-Event.

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

false

Позиция?

named

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

False

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

false

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

false

<CommonParameters>

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

Ввод и вывод

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

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

Нет

Объекты невозможно передать командлету Register-ObjectEvent по конвейеру.

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

Нет

Этот командлет не формирует никаких выходных данных.

Примечания

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

Пример 1

C:\PS>$query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" 

C:\PS> $processWatcher = New-Object System.Management.ManagementEventWatcher $query 

C:\PS> register-objectEvent -inputObject $processWatcher -eventName "EventArrived"

Описание
-----------
В этом примере создается подписка на события, создаваемые при запуске нового процесса. 

Для получения событий EventArrived команда использует объект ManagementEventWatcher. Объект запроса указывает, что события являются событиями создания экземпляров класса Win32_Process.






Пример 2

C:\PS>$query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1), "TargetInstance isa 'Win32_Process'" 

C:\PS> $processWatcher = New-Object System.Management.ManagementEventWatcher $query 

C:\PS> $action = { New-Event "PowerShell.ProcessCreated" -Sender $sender -EventArguments $SourceEventArgs.NewEvent.TargetInstance } 

C:\PS> register-objectEvent -inputObject $processWatcher -eventName "EventArrived" -action $action

Id	Name			State	HasMoreData	 Location			 Command
--	----			-----	-----------	 --------			 -------
2	 422cfe5a-65e... Running	True								 New-Event "PowerShe...

Описание
-----------
В этом примере показано, как задать действие для реагирования на событие. При задании действия создаваемые события не добавляются в очередь событий. Вместо этого действие отвечает на событие. 

В этом примере при возникновении события создания экземпляра, свидетельствующего о запуске нового процесса, создается событие ProcessCreated.

Действие использует автоматические переменные $Sender и $SourceEventArgs, заполняемые только для действий событий. 

Команда Register-ObjectEvent возвращает объект задания, представляющий действие, запускающее фоновое задание. Для управления фоновыми заданиями можно использовать командлеты Job, например Get-Job и Receive-Job. 

Дополнительные сведения см. в разделе about_Jobs.






Пример 3

C:\PS>$s = new-pssession -computername Server01, Server02

C:\PS> invoke-command -session $s -filepath ProcessCreationEvent.ps1

C:\PS> invoke-command -session $s { get-event }

# ProcessCreationEvent.ps1

function Enable-ProcessCreationEvent 
{ 
   $query = New-Object System.Management.WqlEventQuery "__InstanceCreationEvent", ` 
	 (New-Object TimeSpan 0,0,1), ` 
	 "TargetInstance isa 'Win32_Process'" 
   $processWatcher = New-Object System.Management.ManagementEventWatcher $query 

   $identifier = "WMI.ProcessCreated" 
   Register-ObjectEvent -input $processWatcher -eventName "EventArrived" `
	-sourceIdentifier $identifier -messageData "Test" -forward 
   } 
} 

EnableProcessCreationEvent

Описание
-----------
В этом примере показано, как подписаться на события объекта на удаленных компьютерах.

Первая команда создает сеансы PSSession на двух удаленных компьютерах и сохраняет эти сеансы в переменной $s.

Вторая команда с помощью параметра FilePath командлета Invoke-Command выполняет скрипт ProcessCreationEvent.ps1 в каждом из сеансов PSSessions в переменной $s. 

Скрипт включает команду Register-ObjectEvent, которая создает подписку на события создания экземпляров объекта Win32_Process через объект ManagementEventWatcher и событие EventArrived.






Пример 4

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

C:\PS> $timer.Interval = 500

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

C:\PS> $job.gettype().fullname
System.Management.Automation.PSEventJob

C:\PS> $job | 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> $timer.Enabled = $true

C:\PS> & $job.module {$random}
60

C:\PS> & $job.module {$random}
47

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

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

Третья команда регистрирует событие Elapsed объекта таймера с помощью командлета Register-ObjectEvent. Она содержит действие, обрабатывающее событие. Когда интервал времени таймера истекает, появляется событие, и выполняются команды, содержащиеся в действии. В этом случае командлет Get-Random создает случайное число от 0 до 100 и сохраняет его в переменной $random.

При использовании параметра Action в команде Register-ObjectEvent эта команда возвращает объект PSEventJob, представляющий действие. Команда сохраняет объект задания в переменной $job.

Объект PSEventJob, возвращаемый командлетом Register-ObjectEvent, содержится также в свойстве Action подписчика на событие. Дополнительные сведения см. в разделе Get-EventSubscriber.

Четвертая команда показывает, что переменная $job содержит объект PSEventJob. Пятая команда использует командлет Format-List для отображения всех свойств объекта PSEventJob в списке. 

Объект PSEventJob включает свойство Module, содержащее динамический модуль скрипта, который реализует действие.

Шестая команда включает таймер.

В остальных командах используется оператор вызова (&) для вызова команды в модуле и отображения значения переменной $random. Оператор вызова можно использовать для вызова любой команды в модуле, включая команды, которые не экспортируются. В этом случае команды показывают случайное число, создаваемое при появлении события Elapsed.

Дополнительные сведения о модулях см. в разделе about_Modules.






См. также