Compartir a través de


Register-EngineEvent

Se suscribe a eventos generados por el motor de PowerShell y por el cmdlet New-Event.

Sintaxis

Default (Es el valor predeterminado).

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

Description

El cmdlet Register-EngineEvent se suscribe a eventos generados por el motor de PowerShell y el cmdlet New-Event. Use el parámetro SourceIdentifier para especificar el evento.

Puede usar este cmdlet para suscribirse a los eventos del motor OnIdle o Exiting, así como a los eventos generados por el cmdlet New-Event. Estos eventos se agregan automáticamente a la cola de eventos de la sesión sin suscribirse. Sin embargo, la suscripción le permite reenviar los eventos, especificar una acción para responder a los eventos y cancelar la suscripción.

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.

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.

Ejemplos

Ejemplo 1: Registro de un evento de motor de PowerShell en equipos remotos

En este ejemplo se registra un evento de motor de PowerShell en dos equipos remotos.

$S = New-PSSession -ComputerName "Server01, Server02"
Invoke-Command -Session $S {
  Register-EngineEvent -SourceIdentifier ([System.Management.Automation.PSEngineEvent]::Exiting) -Forward
}

New-PSSession crea una sesión administrada por el usuario (PSSession) en cada uno de los equipos remotos. El cmdlet Invoke-Command ejecuta el comando Register-EngineEvent en las sesiones remotas. Register-EngineEvent usa el parámetro SourceIdentifier para identificar el evento. El parámetro Forward indica al motor que reenvíe los eventos de la sesión remota a la sesión local.

Ejemplo 2: Realizar una acción especificada cuando se produce el evento Exiting

En este ejemplo se muestra cómo ejecutar Register-EngineEvent para realizar una acción específica cuando se produce el evento PowerShell.Exiting.

Register-EngineEvent -SourceIdentifier PowerShell.Exiting -SupportEvent -Action {
    Get-History | Export-Clixml $HOME\history.clixml
}

El parámetro SupportEvent se agrega para ocultar la suscripción de eventos. Cuando se cierra PowerShell, en este caso, el historial de comandos de la sesión que se cierra se exporta a un archivo XML en el directorio $HOME del usuario.

Ejemplo 3: Creación y suscripción a un evento definido por el usuario

En este ejemplo se crea una suscripción para eventos del origen MyEventSource. Se trata de un origen arbitrario que vamos a usar para supervisar el progreso de un trabajo. Register-EngineEvent se usa para crear la suscripción. El bloque de script del parámetro de acción registra los datos del evento en un archivo de texto.

Register-EngineEvent -SourceIdentifier MyEventSource -Action {
    "Event: {0}" -f $Event.MessageData | Out-File C:\temp\MyEvents.txt -Append
}

Start-Job -Name TestJob -ScriptBlock {
    while ($true) {
        Register-EngineEvent -SourceIdentifier MyEventSource -Forward
        Start-Sleep -Seconds 2
        "Doing some work..."
        $newEventSplat = @{
            SourceIdentifier = 'MyEventSource'
            MessageData      = ("{0} -  Work done..." -f (Get-Date))
        }
        New-Event @newEventSplat
    }
}
Start-Sleep -Seconds 4
Get-EventSubscriber
Get-Job
SubscriptionId   : 12
SourceObject     :
EventName        :
SourceIdentifier : MyEventSource
Action           : System.Management.Automation.PSEventJob
HandlerDelegate  :
SupportEvent     : False
ForwardEvent     : False

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
18     MyEventSource                   Running       True                                 …
19     TestJob         BackgroundJob   Running       True            localhost            …

Register-EngineEvent creó el Id. de trabajo 18. Start-Job creó ID de trabajo 19. En el ejemplo 4, se quita la suscripción de eventos y los trabajos y, a continuación, se inspecciona el archivo de registro.

Ejemplo 4: Desregistrar eventos y limpiar tareas

Esta es una continuación del ejemplo 3. En este ejemplo esperamos 10 segundos para permitir que se produzcan varios eventos. A continuación, anulamos el registro de la suscripción de eventos.

PS> Start-Sleep -Seconds 10
PS> Get-EventSubscriber | Unregister-Event
PS> Get-Job

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
18     MyEventSource                   Stopped       False                                …
19     TestJob         BackgroundJob   Running       True            localhost            …

PS> Stop-Job -Id 19
PS> Get-Job | Remove-Job
PS> Get-Content C:\temp\MyEvents.txt
Event: 2/18/2020 2:36:19 PM -  Work done...
Event: 2/18/2020 2:36:21 PM -  Work done...
Event: 2/18/2020 2:36:23 PM -  Work done...
Event: 2/18/2020 2:36:25 PM -  Work done...
Event: 2/18/2020 2:36:27 PM -  Work done...
Event: 2/18/2020 2:36:29 PM -  Work done...
Event: 2/18/2020 2:36:31 PM -  Work done...

El cmdlet Unregister-Event detiene el trabajo asociado a la suscripción de eventos (id. de trabajo 18). El ID de trabajo 19 sigue en ejecución y creando nuevos eventos. Para detener el trabajo y eliminar los objetos de trabajo innecesarios, usamos los cmdlets Job. Get-Content muestra el contenido del archivo de registro.

Parámetros

-Action

Especifica los comandos para controlar los eventos. 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 Acción de puede incluir las variables automáticas , , , y , que proporcionan información sobre el evento al bloque de script Acción de . Para obtener más información, consulte sobre_Variables_Automáticas.

Al especificar una acción, Register-EngineEvent 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

-Forward

Indica que el cmdlet envía eventos de esta suscripción a la sesión en este equipo local. 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

-MaxTriggerCount

Especifica el número máximo de veces que se ejecuta la acción para la suscripción de eventos.

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

Este parámetro forma parte de la clase base para todos los cmdlets de Event. El Register-EngineEvent no usa este parámetro. Los datos pasados a este parámetro se omiten.

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 el identificador de origen del evento al que se está suscribiendo. El identificador de origen debe ser único en la sesión actual. Este parámetro es obligatorio.

El valor de este parámetro aparece en el valor de la propiedad sourceIdentifier del objeto de suscriptor y de todos los objetos de evento asociados a esta suscripción.

El valor es específico del origen del evento. Puede ser un valor arbitrario que creó para usarlo con el cmdlet New-Event. El motor de PowerShell admite los valores PSEngineEvent, PowerShell.Exiting, y PowerShell.OnIdle.

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:True
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. Agregue 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, agregue el parámetro Force a los cmdlets Get-EventSubscriber o Unregister-Event.

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.

Al suscribirse al evento Exiting, los cmdlets que puede ejecutar el parámetro Action se limitan a los cmdlets de los módulos Microsoft.PowerShell.Core y Microsoft.PowerShell.Utility. El evento Exiting solo se activa cuando se sale de la sesión bajo el control de PowerShell. El evento no se desencadena cuando se cierra la aplicación host o la ventana de terminal.

El motor se considera inactivo si no ejecuta una canalización. El evento OnIdle se desencadena cuando PowerShell está inactivo durante 300 milisegundos (ms).

Nota:

Cuando PSReadLine está en uso, el evento OnIdle se desencadena cuando ReadKey() agota el tiempo de espera (sin escribir en 300 ms). El evento podría indicarse mientras el usuario está en medio de la edición de una línea de comandos, por ejemplo, el usuario está leyendo ayuda para decidir qué parámetro usar. A partir de PSReadLine 2.2.0-beta4, el comportamiento de OnIdle cambió para indicar el evento solo si hay un tiempo de espera de ReadKey() y el búfer de edición actual está vacío.