CmdID

CmdID / PowerShell / Cmdlets / Register

Register-ObjectEvent

Subscribes to the events that are generated by a Microsoft .NET Framework object. PowerShell reference

From the PowerShell reference 8 parameters

Opens CmdID with your command, read as PowerShell. It is read in your browser and sent nowhere.

What it does

from the PowerShell reference, CC BY 4.0

Subscribes to the events that are generated by a Microsoft .NET Framework object. The Register-ObjectEvent cmdlet subscribes to events that are generated by .NET objects on the local computer or on a remote computer. When the subscribed event is raised, it is added to the event queue in your session. To get events in the event queue, use the Get-Event cmdlet. You can use the parameters of Register-ObjectEvent to specify property values of the events that can help you to identify the event in the queue. You can also use the Action parameter to specify actions to take when a subscribed event is raised and the Forward parameter to send remote events to the event queue in the local session. When you subscribe to an event, an event subscriber is added to your session. To get the event subscribers in the session, use the Get-EventSubscriber cmdlet. To cancel the subscription, use the Unregister-Event cmdlet, which deletes the event subscriber from the session.

Register-ObjectEvent [-InputObject] <PSObject> [-EventName] <String> [[-SourceIdentifier] <String>] [[-Action] <ScriptBlock>] [-MessageData <PSObject>] [-SupportEvent] [-Forward] [-MaxTriggerCount <Int32>] [<CommonParameters>]

Subscribe to events when a new process starts

$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"Identify

Specify an action to respond to an event

$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 $ActionIdentify

Subscribe to object events on remote computers

# 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 }Identify

Use the dynamic module in the PSEventJob object

$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}Identify

Its page in the reference: Register-ObjectEvent.

Parameters

8 in the PowerShell reference
-ActionSpecifies the commands to handle the event. The commands in the Action run when an event is raised, instead of sending the event to the event queue. Enclose the commands in braces ({}) to create a scriptblock. The value of the Action parameter can include the $Event, $EventSubscriber, $Sender, $EventArgs, and $args automatic variables. These variables provide information about the event to the Action scriptblock. For more information, see about_Automatic_Variables. When you specify an action, Register-ObjectEvent returns an event job object that represents that action. You can use the Job cmdlets to manage the event job.
-EventNameSpecifies the event to which you are subscribing. The value of this parameter must be the name of the event that the .NET object exposes. For example, the ManagementEventWatcher class has events named EventArrived and Stopped. To find the event name of an event, use the Get-Member cmdlet.
-ForwardIndicates that the cmdlet sends events for this subscription to a remote session. Use this parameter when you are registering for events on a remote computer or in a remote session.
-InputObjectSpecifies the .NET object that generates the events. Enter a variable that contains the object, or type a command or expression that gets the object.
-MaxTriggerCountSpecifies the maximum number of times an event can be triggered.
-MessageDataSpecifies any additional data to be associated with this event subscription. The value of this parameter appears in the MessageData property of all events associated with this subscription.
-SourceIdentifierSpecifies a name that you select for the subscription. The name that you select must be unique in the current session. The default value is the GUID that PowerShell assigns. The value of this parameter appears in the value of the SourceIdentifier property of the subscriber object and all event objects associated with this subscription.
-SupportEventIndicates that the cmdlet hides the event subscription. Use this parameter when the current subscription is part of a more complex event registration mechanism and should not be discovered independently. To view or cancel a subscription that was created with the SupportEvent parameter, use the Force parameter of the Get-EventSubscriber and Unregister-Event cmdlets.