Register-ObjectEvent (Microsoft.PowerShell.Utility)
Register-ObjectEvent
- Модуль:
- Microsoft.PowerShell.Utility
Подписывается на события, генерируемые объектом Microsoft .NET Framework.
Синтаксис
Register-ObjectEvent
[-InputObject] <PSObject>
[-EventName] <String>
[[-SourceIdentifier] <String>]
[[-Action] <ScriptBlock>]
[-MessageData <PSObject>]
[-SupportEvent]
[-Forward]
[-MaxTriggerCount <Int32>]
[<CommonParameters>]Описание
Командлет Register-ObjectEvent подписывается на события, генерируемые объектами .NET на локальном или удаленном компьютере.
Когда событие, на которое вы подписаны, возникает, оно добавляется в очередь событий вашего сеанса. Чтобы получить события в очереди событий, используйте командлет Get-Event.
Вы можете использовать параметры Register-ObjectEvent, чтобы указать значения свойств событий, которые помогут вам идентифицировать событие в очереди. Вы также можете использовать параметр Action, чтобы указать действия, которые необходимо выполнить при возникновении подписанного события, и параметр Forward, чтобы отправлять удаленные события в очередь событий в локальном сеансе.
Когда вы подписываетесь на событие, к вашему сеансу добавляется подписчик на событие. Чтобы получить подписчиков событий в сеансе, используйте командлет Get-EventSubscriber. Чтобы отменить подписку, используйте командлет Unregister-Event, который удаляет подписчика на событие из сеанса.
Примеры
Пример 1. Подписка на события при запуске нового процесса
В этом примере подписываются события, генерируемые при запуске нового процесса.
Команда использует объект ManagementEventWatcher для получения событий EventArrived. Объект запроса указывает, что события являются событиями создания экземпляра для класса Win32_Process.
$queryParameters = '__InstanceCreationEvent', (New-Object TimeSpan 0,0,1),
"TargetInstance isa 'Win32_Process'"
$Query = New-Object System.Management.WqlEventQuery -ArgumentList $queryParameters
$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $Query
Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived"Пример 2. Укажите действие в ответ на событие
Когда вы указываете действие, возникающие события не добавляются в очередь событий. Вместо этого действие реагирует на событие. В этом примере, когда возникает событие создания экземпляра, указывающее на запуск нового процесса, возникает новое событие ProcessCreated.
$queryParameters = '__InstanceCreationEvent', (New-Object TimeSpan 0,0,1),
"TargetInstance isa 'Win32_Process'"
$Query = New-Object System.Management.WqlEventQuery -ArgumentList $queryParameters
$ProcessWatcher = New-Object System.Management.ManagementEventWatcher $query
$newEventArgs = @{
SourceIdentifier = 'PowerShell.ProcessCreated'
Sender = $Sender
EventArguments = $EventArgs.NewEvent.TargetInstance
}
$Action = { New-Event @newEventArgs }
Register-ObjectEvent -InputObject $ProcessWatcher -EventName "EventArrived" -Action $Action
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
5 3db2d67a-efff-... NotStarted False New-Event @newEventArgsВ действии используются автоматические переменные $Sender и $EventArgs, которые заполняются только для действий по событию.
Команда Register-ObjectEvent возвращает объект задания, представляющий действие, которое выполняется как фоновое задание. Для управления фоновым заданием можно использовать командлеты задания, такие как Get-Job и Receive-Job. Для получения дополнительной информации см. about_Jobs.
Пример 3. Подписка на события объекта на удаленных компьютерах
В этом примере показано, как подписаться на события объекта на удаленных компьютерах. В этом примере используется функция Enable-ProcessCreationEvent, определенная в файле сценария ProcessCreationEvent.ps1. Этот сценарий доступен для всех компьютеров в примере.
# ProcessCreationEvent.ps1
function Enable-ProcessCreationEvent {
$queryParameters = "__InstanceCreationEvent", (New-Object TimeSpan 0,0,1),
"TargetInstance isa 'Win32_Process'"
$Query = New-Object System.Management.WqlEventQuery -ArgumentList $queryParameters
$objectEventArgs = @{
Input = New-Object System.Management.ManagementEventWatcher $Query
EventName = 'EventArrived'
SourceIdentifier = 'WMI.ProcessCreated'
MessageData = 'Test'
Forward = $True
}
Register-ObjectEvent @objectEventArgs
}
$S = New-PSSession -ComputerName "Server01, Server02"
Invoke-Command -Session $S -FilePath ProcessCreationEvent.ps1
Invoke-Command -Session $S { Enable-ProcessCreationEvent }Сначала мы создаем PSSession на двух удаленных компьютерах и сохраняем их в переменной $S. Затем командлет Invoke-Command запускает сценарий ProcessCreationEvent.ps1 в каждом сеансе PSSession в $S. Это действие создает функцию Enable-ProcessCreationEvent в удаленных сеансах. Наконец, мы запускаем функцию Enable-ProcessCreationEvent в удаленных сеансах.
Функция включает команду Register-ObjectEvent, которая подписывается на события создания экземпляра объекта Win32_Process через объект ManagementEventWatcher и его EventArrived< /стронг> событие.
Пример 4. Использование динамического модуля в объекте PSEventJob.
В этом примере показано, как использовать динамический модуль в объекте PSEventJob, который создается при включении Действия в регистрацию события. Сначала мы создаем и активируем объект таймера, затем устанавливаем интервал таймера на 500 (миллисекунды). Командлет Register-ObjectEvent регистрирует событие Elapsed объекта таймера. Объект PSEventJob сохраняется в переменной $Job, а также доступен в свойстве Action подписчика событий. Дополнительные сведения см. в разделе Get-EventSubscriber.
По истечении интервала таймера возникает событие и выполняется действие. В этом случае командлет Get-Random генерирует случайное число от 0 до 100 и сохраняет его в переменной $Random.
$Timer = New-Object Timers.Timer
$Timer.Interval = 500
$Timer.Enabled = $True
$objectEventArgs = @{
InputObject = $Timer
EventName = 'Elapsed'
SourceIdentifier = 'Timer.Random'
Action = {$Random = Get-Random -Min 0 -Max 100}
}
$Job = Register-ObjectEvent @objectEventArgs
$Job | Format-List -Property *
& $Job.module {$Random}
& $Job.module {$Random}
State : Running
Module : __DynamicModule_53113769-31f2-42dc-830b-8749325e28d6
StatusMessage :
HasMoreData : True
Location :
Command : $Random = Get-Random -Min 0 -Max 100
JobStateInfo : Running
Finished : System.Threading.ManualResetEvent
InstanceId : 47b5ec9f-bfe3-4605-860a-4674e5d44ca8
Id : 7
Name : Timer.Random
ChildJobs : {}
PSBeginTime : 6/27/2019 10:19:06 AM
PSEndTime :
PSJobTypeName :
Output : {}
Error : {}
Progress : {}
Verbose : {}
Debug : {}
Warning : {}
Information : {}
60
47PSEventJob имеет свойство Module, содержащее модуль динамического сценария, реализующий действие. Используя оператор вызова (&), мы вызываем команду в модуле для отображения значения переменной $Random.
Дополнительные сведения о модулях см. в разделе about_Modules.
Параметры
-Action
Указывает команды для обработки события. Команды в Действии выполняются при возникновении события, а не отправляют его в очередь событий. Заключите команды в фигурные скобки ( { } ), чтобы создать блок сценария.
Значение параметра Action может включать в себя $Event, $EventSubscriber, $Sender, $. EventArgs и автоматические переменные $Args. Эти переменные предоставляют информацию о событии блоку сценария Action. Дополнительные сведения см. в разделе about_Automatic_Variables.
Когда вы указываете действие, Register-ObjectEvent возвращает объект задания события, который представляет это действие. Для управления заданием события можно использовать командлеты задания.
- Тип :
ScriptBlock
- Позиция:
101
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-EventName
Указывает событие, на которое вы подписываетесь.
Значение этого параметра должно быть именем события, предоставляемого объектом .NET. Например, класс ManagementEventWatcher имеет события с именами EventArrived и Stopped. Чтобы найти имя события, используйте командлет Get-Member.
- Тип :
String
- Позиция:
1
- Значение по умолчанию:
None
- Необходимый:
True
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-Forward
Указывает, что командлет отправляет события для этой подписки в удаленный сеанс. Используйте этот параметр при регистрации на мероприятия на удаленном компьютере или в удаленном сеансе.
- Тип :
SwitchParameter
- Позиция:
Именованный
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-InputObject
Указывает объект .NET, генерирующий события. Введите переменную, содержащую объект, или введите команду или выражение, позволяющее получить объект.
- Тип :
PSОбъект
- Позиция:
0
- Значение по умолчанию:
None
- Необходимый:
True
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-MaxTriggerCount
Указывает максимальное количество раз, которое может быть инициировано событие.
- Тип :
Int32
- Позиция:
Именованный
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-MessageData
Указывает любые дополнительные данные, которые будут связаны с этой подпиской на событие. Значение этого параметра отображается в свойстве MessageData всех событий, связанных с этой подпиской.
- Тип :
PSОбъект
- Позиция:
Именованный
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-SourceIdentifier
Указывает имя, которое вы выбираете для подписки. Выбранное имя должно быть уникальным в текущем сеансе. Значением по умолчанию является GUID, назначенный PowerShell.
Значение этого параметра отображается в значении свойства SourceIdentifier объекта подписчика и всех объектов событий, связанных с этой подпиской.
- Тип :
String
- Позиция:
100
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
-SupportEvent
Указывает, что командлет скрывает подписку на события. Используйте этот параметр, если текущая подписка является частью более сложного механизма регистрации событий и не должна обнаруживаться независимо.
Чтобы просмотреть или отменить подписку, созданную с помощью параметра SupportEvent, используйте параметр Force в Get-EventSubscriber и Unregister- Командлеты событий.
- Тип :
SwitchParameter
- Позиция:
Именованный
- Значение по умолчанию:
None
- Необходимый:
False
- Примите ввод конвейера:
False
- Принимайте подстановочные знаки:
False
Входы
Нет
Вы не можете передавать объекты в этот командлет.
Выходы
Нет
По умолчанию этот командлет не возвращает никаких результатов.
PSEventJob
При использовании параметра Action этот командлет возвращает объект PSEventJob.
Примечания
События, подписки на события и очередь событий существуют только в текущем сеансе. Если вы закроете текущий сеанс, очередь событий будет удалена, а подписка на события будет отменена.