Partager via


Register-EngineEvent

S’abonne aux événements générés par le moteur PowerShell et par l’applet de commande New-Event.

Syntaxe

Default (Par défaut)

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

Description

L’applet de commande Register-EngineEvent s’abonne aux événements générés par le moteur PowerShell et l’applet de commande New-Event. Utilisez le paramètre SourceIdentifier pour spécifier l’événement.

Vous pouvez utiliser ce cmdlet pour vous abonner aux événements du moteur OnIdle ou Exiting et aux événements générés par le cmdlet New-Event. Ces événements sont automatiquement ajoutés à la file d’attente d’événements dans votre session sans s’abonner. Toutefois, l’abonnement vous permet de transférer les événements, de spécifier une action pour répondre aux événements et d’annuler l’abonnement.

Lorsque vous vous abonnez à un événement, un abonné à un événement est ajouté à votre session. Pour obtenir les abonnés à l’événement dans la session, utilisez le cmdlet Get-EventSubscriber. Pour annuler l’abonnement, utilisez l’applet de commande Unregister-Event, qui supprime l’abonné à l’événement de la session.

Lorsque l’événement abonné est déclenché, il est ajouté à la file d’attente d’événements dans votre session. Pour obtenir des événements dans la file d’attente d’événements, utilisez l’applet de commande Get-Event.

Exemples

Exemple 1 : Inscrire un événement de moteur PowerShell sur des ordinateurs distants

Cet exemple s'enregistre pour un événement du moteur PowerShell sur deux ordinateurs distants.

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

New-PSSession crée une session gérée par l’utilisateur (PSSession) sur chacun des ordinateurs distants. L’applet de commande Invoke-Command exécute la commande Register-EngineEvent dans les sessions à distance. Register-EngineEvent utilise le paramètre SourceIdentifier pour identifier l’événement. Le paramètre Forward indique au moteur de transférer les événements de la session distante à la session locale.

Exemple 2 : effectuer une action spécifiée lorsque l’événement Exiting se produit

Cet exemple montre comment exécuter Register-EngineEvent pour effectuer une action spécifique lorsque l’événement PowerShell.Exiting se produit.

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

Le paramètre SupportEvent est ajouté pour masquer l’abonnement aux événements. Lorsque PowerShell se ferme, dans ce cas, l’historique des commandes de la session de sortie est exporté un fichier XML dans le répertoire $HOME de l’utilisateur.

Exemple 3 : Créer et s’abonner à un événement défini par l’utilisateur

Cet exemple crée un abonnement pour les événements à partir de la source MyEventSource. Il s’agit d’une source arbitraire que nous allons utiliser pour surveiller la progression d’un travail. Register-EngineEvent est utilisé pour créer l’abonnement. Le bloc de script pour le paramètre Action consigne les données d'événement dans un fichier texte.

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 a créé l’ID de travail 18. Start-Job a créé l'identifiant de travail 19. Dans l’exemple n° 4, nous supprimons l’abonnement aux événements et les travaux, puis inspectons le fichier journal.

Exemple 4 : désinscrire les événements et nettoyer les Jobs

Il s’agit d’une continuation de l’exemple 3. Dans cet exemple, nous attendons 10 secondes pour laisser plusieurs événements se produire. Ensuite, nous annulons l’inscription de l’abonnement aux événements.

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

L’applet de commande Unregister-Event arrête le travail associé à l’abonnement à l’événement (ID de travail 18). Le Job ID 19 est toujours en cours d’exécution et crée de nouveaux événements. Nous utilisons les applets de commande Tâche pour arrêter la tâche et supprimer les objets de tâche inutiles. Get-Content affiche le contenu du fichier journal.

Paramètres

-Action

Spécifie les commandes pour gérer les événements. Les commandes de l’action s’exécutent lorsqu’un événement est déclenché, au lieu d’envoyer l’événement à la file d’attente d’événements. Mettez les commandes entre accolades ({}) pour créer un bloc de script.

La valeur du paramètre Action de peut inclure les variables automatiques , , , et , qui fournissent des informations sur l’événement au bloc de script Action. Pour plus d’informations, consultez à propos des variables automatiques.

Lorsque vous spécifiez une action, Register-EngineEvent retourne un objet de travail d’événement qui représente cette action. Vous pouvez utiliser les applets de commande Job pour gérer la tâche de l'événement.

Propriétés du paramètre

Type:ScriptBlock
Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:101
Obligatoire:False
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-Forward

Indique que le cmdlet envoie des événements pour cet abonnement à la session sur l’ordinateur local. Utilisez ce paramètre lorsque vous inscrivez des événements sur un ordinateur distant ou dans une session à distance.

Propriétés du paramètre

Type:SwitchParameter
Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:Named
Obligatoire:False
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-MaxTriggerCount

Spécifie le nombre maximal de fois où l’action est exécutée pour l’abonnement à l’événement.

Propriétés du paramètre

Type:Int32
Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:Named
Obligatoire:False
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-MessageData

Ce paramètre fait partie de la classe de base pour toutes les applets de commande Event. Le Register-EngineEvent n’utilise pas ce paramètre. Toutes les données transmises à ce paramètre sont ignorées.

Propriétés du paramètre

Type:PSObject
Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:Named
Obligatoire:False
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-SourceIdentifier

Spécifie l’identificateur source de l’événement auquel vous vous abonnez. L’identificateur source doit être unique dans la session active. Ce paramètre est obligatoire.

La valeur de ce paramètre apparaît dans la valeur de la propriété SourceIdentifier de l’objet abonné et de tous les objets d’événement associés à cet abonnement.

La valeur est spécifique à la source de l’événement. Il peut s’agir d’une valeur arbitraire que vous avez créée à utiliser avec l’applet de commande New-Event. Le moteur PowerShell prend en charge les valeurs PSEngineEventPowerShell.Exiting et PowerShell.OnIdle.

Propriétés du paramètre

Type:String
Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:100
Obligatoire:True
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

-SupportEvent

Indique que l’applet de commande masque l’abonnement aux événements. Ajoutez ce paramètre lorsque l’abonnement actuel fait partie d’un mécanisme d’inscription d’événements plus complexe et qu’il ne doit pas être découvert indépendamment.

Pour afficher ou annuler un abonnement créé avec le paramètre SupportEvent, ajoutez le paramètre Force aux cmdlets Get-EventSubscriber ou Unregister-Event.

Propriétés du paramètre

Type:SwitchParameter
Valeur par défaut:None
Prend en charge les caractères génériques:False
DontShow:False

Jeux de paramètres

(All)
Position:Named
Obligatoire:False
Valeur du pipeline:False
Valeur du pipeline par nom de propriété:False
Valeur des arguments restants:False

CommonParameters

Cette applet de commande prend en charge les paramètres courants : -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction et -WarningVariable. Pour plus d’informations, consultez about_CommonParameters.

Entrées

None

Vous ne pouvez pas diriger les objets vers cette applet de commande.

Sorties

None

Par défaut, cette applet de commande ne retourne aucune sortie.

PSEventJob

Lorsque vous utilisez le paramètre Action , cette applet de commande retourne un objet PSEventJob.

Notes

Les événements, les abonnements aux événements et la file d’attente d’événements existent uniquement dans la session active. Si vous fermez la session active, la file d’attente d’événements est ignorée et l’abonnement à l’événement est annulé.

Lors de l’abonnement à l’événement Exiting, les applets de commande qui peuvent être exécutées par le paramètre Action sont limitées aux applets de commande dans les modules Microsoft.PowerShell.Core et Microsoft.PowerShell.Utility. L’événement Exiting n’est déclenché que lorsque la session est fermée sous le contrôle de PowerShell. L’événement n’est pas déclenché lorsque l’application hôte ou la fenêtre de terminal est fermée.

Le moteur est considéré comme étant inactif s’il n’exécute pas de pipeline. L’événement OnIdle est déclenché lorsque PowerShell a été inactif pendant 300 millisecondes (ms).

Remarque

Lorsque PSReadLine est en cours d’utilisation, l’événement OnIdle est déclenché lorsque ReadKey() expire (aucune saisie en 300 ms). L’événement peut être signalé pendant que l’utilisateur est au milieu de la modification d’une ligne de commande, par exemple, l’utilisateur lit l’aide pour décider quel paramètre utiliser. À partir de PSReadLine 2.2.0-beta4, le comportement OnIdle a changé pour ne signaler l’événement que s’il y a un timeout ReadKey() et que le tampon d’édition en cours est vide.