Register-ObjectEvent
Se suscribe a los eventos generados por un objeto de Microsoft .NET Framework.
Syntax
Register-ObjectEvent
[-InputObject] <PSObject>
[-EventName] <String>
[[-SourceIdentifier] <String>]
[[-Action] <ScriptBlock>]
[-MessageData <PSObject>]
[-SupportEvent]
[-Forward]
[-MaxTriggerCount <Int32>]
[<CommonParameters>]
Description
El Register-ObjectEvent
cmdlet se suscribe a eventos generados por objetos .NET en el equipo local o en un equipo remoto.
Cuando se genera el evento suscrito, se agrega a la cola de eventos de su sesión. Para obtener eventos en la cola de eventos, use el Get-Event
cmdlet .
Puede usar los parámetros de Register-ObjectEvent
para especificar valores de propiedad de los eventos que pueden ayudarle a identificar el evento en la cola. También puede usar el parámetro Action para especificar las acciones que se deben realizar cuando se genera un evento suscrito y el parámetro Forward para enviar eventos remotos a la cola de eventos de la sesión local.
Cuando se suscribe a un evento, se agrega un suscriptor de eventos a su sesión. Para obtener los suscriptores de eventos en la sesión, use el Get-EventSubscriber
cmdlet . Para cancelar la suscripción, use el Unregister-Event
cmdlet , que elimina el suscriptor de eventos de la sesión.
Ejemplos
Ejemplo 1: Suscribirse a eventos cuando se inicia un nuevo proceso
Este ejemplo se suscribe a los eventos generados cuando se inicia un nuevo proceso.
El comando usa el objeto ManagementEventWatcher para obtener eventos EventArrived . Un objeto de consulta especifica que los eventos son eventos de creación de instancias para la clase 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"
Ejemplo 2: Especificar una acción para responder a un evento
Cuando se especifica una acción, los eventos generados no se agregan a la cola de eventos. En su lugar, la acción responde al evento. En este ejemplo, cuando se genera un evento de creación de instancia que indica que se inicia un nuevo proceso, se genera un nuevo evento 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
La acción usa las $Sender
variables y $EventArgs
automáticas que se rellenan solo para las acciones de evento.
El Register-ObjectEvent
comando devuelve un objeto de trabajo que representa la acción , que se ejecuta como un trabajo en segundo plano. Puede usar los cmdlets job, como Get-Job
y Receive-Job
, para administrar el trabajo en segundo plano. Para más información, consulte about_Jobs (Acerca de los trabajos).
Ejemplo 3: Suscribirse a eventos de objeto en equipos remotos
Este ejemplo muestra cómo suscribirse a eventos de objeto en equipos remotos. En este ejemplo se usa la Enable-ProcessCreationEvent
función que se define en el archivo de ProcessCreationEvent.ps1
script. Este script está disponible para todos los equipos del ejemplo.
# 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 }
La primera que creamos PSSessions en dos equipos remotos y las guardamos en la $S
variable . A continuación, el Invoke-Command
cmdlet ejecuta el ProcessCreationEvent.ps1
script en cada una de las PSSessions de $S
. Esta acción crea la Enable-ProcessCreationEvent
función en las sesiones remotas.
Por último, ejecutamos la Enable-ProcessCreationEvent
función en las sesiones remotas.
La función incluye un Register-ObjectEvent
comando que se suscribe a eventos de creación de instancias en el objeto Win32_Process a través del objeto ManagementEventWatcher y su evento EventArrived .
Ejemplo 4: Uso del módulo dinámico en el objeto PSEventJob
En este ejemplo se muestra cómo usar el módulo dinámico en el objeto PSEventJob que se crea al incluir una acción en un registro de eventos. Primero creamos y habilitamos un objeto de temporizador y, a continuación, establecemos el intervalo del temporizador en 500 (milisegundos). El Register-ObjectEvent
cmdlet registra el evento Transcurrido del objeto de temporizador. El objeto PSEventJob se guarda en la $Job
variable y también está disponible en la propiedad Action del suscriptor del evento. Para obtener más información, vea Get-EventSubscriber.
Cada vez que transcurre el intervalo del temporizador, se genera un evento y se ejecuta la acción. En este caso, el Get-Random
cmdlet genera un número aleatorio entre 0 y 100 y lo guarda en la $Random
variable .
$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
47
PSEventJob tiene una propiedad Module que contiene un módulo de script dinámico que implementa la acción. Con el operador de llamada (&
), invocamos el comando en el módulo para mostrar el valor de la $Random
variable.
Para obtener más información sobre los módulos, consulte about_Modules.
Parámetros
-Action
Especifica los comandos para controlar el evento. Los comandos de Action se ejecutan cuando se genera un evento, en lugar de enviar el evento a la cola de eventos. Incluya los comandos entre llaves ({}) para crear un bloque de script.
El valor del parámetro Action puede incluir las $Event
variables automáticas , $EventSubscriber
$Sender
, , $EventArgs
y $Args
. Estas variables proporcionan información sobre el evento en el bloque Script de acción . Para obtener más información, vea about_Automatic_Variables.
Cuando se especifica una acción, Register-ObjectEvent
devuelve un objeto de trabajo de evento que representa esa acción. Puede usar los cmdlets de trabajo para administrar el trabajo de evento.
Type: | ScriptBlock |
Position: | 101 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-EventName
Especifica el evento al que se suscribe.
El valor de este parámetro debe ser el nombre del evento que expone el objeto .NET. Por ejemplo, la clase ManagementEventWatcher tiene eventos denominados EventArrived y Stopped. Para buscar el nombre del evento de un evento, use el Get-Member
cmdlet .
Type: | String |
Position: | 1 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Forward
Indica que el cmdlet envía eventos para esta suscripción a una sesión remota. Utilice este parámetro cuando se registre en eventos de un equipo remoto o de una sesión remota.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Especifica el objeto .NET que genera los eventos. Escriba una variable que contenga el objeto, o escriba un comando o una expresión que obtenga el objeto.
Type: | PSObject |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MaxTriggerCount
Especifica el número máximo de veces que se puede desencadenar un evento.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-MessageData
Especifica los datos adicionales que se asociarán con esta suscripción de evento. El valor de este parámetro aparece en la propiedad MessageData de todos los eventos asociados a esta suscripción.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SourceIdentifier
Especifica un nombre que usted selecciona para la suscripción. El nombre que seleccione debe ser único en la sesión actual. El valor predeterminado es el GUID que asigna PowerShell.
El valor de este parámetro aparece en el valor de la propiedad SourceIdentifier del objeto de suscriptor y todos los objetos de evento asociados a esta suscripción.
Type: | String |
Position: | 100 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SupportEvent
Indica que el cmdlet oculta la suscripción de eventos. Use este parámetro cuando la suscripción actual forme parte de un mecanismo de registro de eventos más complejo y no se debe detectar de forma independiente.
Para ver o cancelar una suscripción que se creó con el parámetro SupportEvent , use el parámetro Force de los Get-EventSubscriber
cmdlets y Unregister-Event
.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Entradas
None
No se pueden canalizar objetos a este cmdlet.
Salidas
None
De forma predeterminada, este cmdlet no devuelve ninguna salida.
Cuando se usa el parámetro Action , este cmdlet devuelve un objeto PSEventJob .
Notas
La cola de eventos, las suscripciones de eventos y los eventos solo existen en la sesión actual. Si la cierra, la cola de eventos se descartará y la suscripción al evento se cancelará.