Compartir a través de


Register-ObjectEvent

Se suscribe a los eventos generados por un objeto de Microsoft .NET Framework.

Sintaxis

Default (Es el valor predeterminado).

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

Description

El cmdlet Register-ObjectEvent 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 los eventos de la cola de eventos, use el cmdlet Get-Event.

Puede usar los parámetros de Register-ObjectEvent para especificar los 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 en la sesión local.

Cuando se suscribe a un evento, se agrega un suscriptor de eventos a la sesión. Para obtener los suscriptores de eventos en la sesión, use el cmdlet Get-EventSubscriber. Para cancelar la suscripción, use el cmdlet Unregister-Event, que elimina el suscriptor de eventos de la sesión.

Ejemplos

Ejemplo 1: Suscribirse a eventos cuando se inicia un nuevo proceso

En este ejemplo se suscribe a eventos generados cuando se inicia un nuevo proceso.

El comando usa el objeto managementEventWatcher de 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

Al especificar una acción, los eventos que se generan 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 instancias 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 el $Sender y $EventArgs variables automáticas que se rellenan solo para las acciones de evento.

El comando Register-ObjectEvent 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

En este ejemplo se muestra cómo suscribirse a eventos de objeto en equipos remotos. En este ejemplo se usa la función Enable-ProcessCreationEvent que se define en el archivo de script de ProcessCreationEvent.ps1. 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 variable $S. A continuación, el cmdlet Invoke-Command ejecuta el script de ProcessCreationEvent.ps1 en cada una de las PSSessions de $S. Esta acción crea la función Enable-ProcessCreationEvent en las sesiones remotas. Por último, ejecutamos la función Enable-ProcessCreationEvent en las sesiones remotas.

La función incluye un comando Register-ObjectEvent 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 un action de 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 cmdlet registra el evento transcurrido del objeto de temporizador. El objeto PSEventJob se guarda en la variable y también está disponible en la propiedad Action del suscriptor de eventos. 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 cmdlet Get-Random genera un número aleatorio entre 0 y 100 y lo guarda en la variable $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
47

El PSEventJob de 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 variable $Random.

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 de puede incluir las variables automáticas , , , y automáticas. Estas variables proporcionan información sobre el evento en el bloque de script acción de . Para obtener más información, consulte sobre_Variables_Automáticas.

Al especificar 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.

Propiedades del parámetro

Tipo:ScriptBlock
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:101
Mandatory:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-EventName

Especifica el evento al que se va a suscribir.

El valor de este parámetro debe ser el nombre del evento que expone el objeto .NET. Por ejemplo, la clase managementEventWatcher de tiene eventos denominados EventArrived y Detenido. Para buscar el nombre del evento de un evento, use el cmdlet Get-Member.

Propiedades del parámetro

Tipo:String
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:1
Mandatory:True
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-Forward

Indica que el cmdlet envía eventos para esta suscripción a una sesión remota. Use este parámetro cuando se registren eventos en un equipo remoto o en una sesión remota.

Propiedades del parámetro

Tipo:SwitchParameter
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Mandatory:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-InputObject

Especifica el objeto .NET que genera los eventos. Escriba una variable que contenga el objeto o escriba un comando o expresión que obtenga el objeto .

Propiedades del parámetro

Tipo:PSObject
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:0
Mandatory:True
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-MaxTriggerCount

Especifica el número máximo de veces que se puede desencadenar un evento.

Propiedades del parámetro

Tipo:Int32
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Mandatory:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-MessageData

Especifica los datos adicionales que se van a asociar a esta suscripción de eventos. El valor de este parámetro aparece en la propiedad MessageData de todos los eventos asociados a esta suscripción.

Propiedades del parámetro

Tipo:PSObject
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Mandatory:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-SourceIdentifier

Especifica un nombre que seleccione 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 del SourceIdentifier propiedad del objeto de suscriptor y todos los objetos de evento asociados a esta suscripción.

Propiedades del parámetro

Tipo:String
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:100
Mandatory:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes: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 cmdlets y .

Propiedades del parámetro

Tipo:SwitchParameter
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:Named
Mandatory:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

CommonParameters

Este cmdlet admite los parámetros comunes: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction y -WarningVariable. Para obtener más información, vea about_CommonParameters.

Entradas

None

No se pueden canalizar objetos a este cmdlet.

Salidas

None

De forma predeterminada, este cmdlet no devuelve ninguna salida.

PSEventJob

Cuando se usa el parámetro Action, este cmdlet devuelve un objeto PSEventJob.

Notas

Los eventos, las suscripciones de eventos y la cola de eventos solo existen en la sesión actual. Si se cierra la sesión actual, se descarta la fila de eventos y se cancela la suscripción al evento.