Register-ObjectEvent
S'abonne aux événements générés par un objet Microsoft .NET Framework.
Syntaxe
Register-ObjectEvent
[-InputObject] <PSObject>
[-EventName] <String>
[[-SourceIdentifier] <String>]
[[-Action] <ScriptBlock>]
[-MessageData <PSObject>]
[-SupportEvent]
[-Forward]
[-MaxTriggerCount <Int32>]
[<CommonParameters>]
Description
L’applet Register-ObjectEvent
de commande s’abonne aux événements générés par des objets .NET sur l’ordinateur local ou sur un ordinateur distant.
Quand l'événement auquel vous êtes 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 Get-Event
commande.
Vous pouvez utiliser les paramètres de spécifier les valeurs de Register-ObjectEvent
propriété des événements qui peuvent vous aider à identifier l’événement dans la file d’attente. Vous pouvez également utiliser le paramètre Action pour spécifier des actions à entreprendre lorsqu’un événement abonné est déclenché et le paramètre Forward pour envoyer des événements distants à la file d’attente d’événements dans la session locale.
Lorsque vous vous abonnez à un événement, un abonné est ajouté à votre session. Pour obtenir les abonnés aux événements dans la session, utilisez l’applet de Get-EventSubscriber
commande. Pour annuler l’abonnement, utilisez l’applet Unregister-Event
de commande, qui supprime l’abonné à l’événement de la session.
Exemples
Exemple 1 : S’abonner aux événements au démarrage d’un nouveau processus
Cet exemple s'abonne aux événements générés au démarrage d'un nouveau processus.
La commande utilise l’objet ManagementEventWatcher pour obtenir les événements EventArrived . Un objet de requête spécifie que les événements sont des événements de création d’instances pour la classe 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"
Exemple 2 : Spécifier une action pour répondre à un événement
Lorsque vous spécifiez une action, les événements déclenchés ne sont pas ajoutés à la file d'attente des événements. À la place, l'action répond à l'événement. Dans cet exemple, lorsqu’un événement de création d’instance est déclenché indiquant qu’un nouveau processus est démarré, un nouvel événement ProcessCreated est déclenché.
$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
L’action utilise les $Sender
variables automatiques qui $EventArgs
sont renseignées uniquement pour les actions d’événement.
La Register-ObjectEvent
commande retourne un objet de travail qui représente l’action, qui s’exécute en tant que travail en arrière-plan. Vous pouvez utiliser les applets de commande Job, telles que Get-Job
et Receive-Job
, pour gérer le travail en arrière-plan. Pour plus d’informations, consultez à propos des_tâches.
Exemple 3 : S’abonner à des événements d’objet sur des ordinateurs distants
Cet exemple montre comment s'abonner aux événements d'objet sur des ordinateurs distants. Cet exemple utilise la Enable-ProcessCreationEvent
fonction définie dans le ProcessCreationEvent.ps1
fichier de script. Ce script est disponible pour tous les ordinateurs de l’exemple.
# 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 }
Nous créons d’abord des sessions PSSession sur deux ordinateurs distants et les enregistrez dans la $S
variable. Ensuite, l’applet Invoke-Command
de commande exécute le ProcessCreationEvent.ps1
script dans chacun des PSSessions dans $S
. Cette action crée la Enable-ProcessCreationEvent
fonction dans les sessions distantes.
Enfin, nous exécutons la Enable-ProcessCreationEvent
fonction dans les sessions à distance.
La fonction inclut une Register-ObjectEvent
commande qui s’abonne aux événements de création d’instance sur l’objet Win32_Process via l’objet ManagementEventWatcher et son événement EventArrived.
Exemple 4 : Utiliser le module dynamique dans l’objet PSEventJob
Cet exemple montre comment utiliser le module dynamique dans l’objet PSEventJob créé lorsque vous incluez une action dans une inscription d’événement. Tout d’abord, nous créons et activez un objet minuteur, puis nous définissons l’intervalle du minuteur sur 500 (millisecondes). L’applet Register-ObjectEvent
de commande inscrit l’événement Elapsed de l’objet minuteur. L’objet PSEventJob est enregistré dans la $Job
variable et est également disponible dans la propriété Action de l’abonné à l’événement. Pour plus d’informations, consultez Get-EventSubscriber.
Chaque fois que l’intervalle du minuteur s’écoule, un événement est déclenché et l’action est exécutée. Dans ce cas, l’applet Get-Random
de commande génère un nombre aléatoire compris entre 0 et 100 et l’enregistre dans 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 a une propriété Module qui contient un module de script dynamique qui implémente l’action. À l’aide de l’opérateur d’appel (&
), nous appelons la commande dans le module pour afficher la valeur de la $Random
variable.
Pour plus d’informations sur les modules, consultez about_Modules.
Paramètres
-Action
Spécifie les commandes à gérer l’événement. 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. Placez les commandes entre accolades ( { } ) pour créer un bloc de script.
La valeur du paramètre Action peut inclure les variables automatiques , , $EventArgs
$EventSubscriber
$Sender
et $Args
les $Event
variables automatiques. Ces variables fournissent des informations sur l’événement au bloc de script Action . Pour plus d’informations, consultez about_Automatic_Variables.
Lorsque vous spécifiez une action, Register-ObjectEvent
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.
Type: | ScriptBlock |
Position: | 101 |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-EventName
Spécifie l'événement auquel vous vous abonnez.
La valeur de ce paramètre doit être le nom de l’événement exposé par l’objet .NET. Par exemple, la classe ManagementEventWatcher a des événements nommés EventArrived et Stopped. Pour rechercher le nom de l’événement d’un événement, utilisez l’applet Get-Member
de commande.
Type: | String |
Position: | 1 |
Valeur par défaut: | None |
Obligatoire: | True |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-Forward
Indique que l’applet de commande envoie des événements pour cet abonnement à une session à distance. Utilisez ce paramètre lorsque vous vous inscrivez aux événements sur un ordinateur distant ou dans une session à distance.
Type: | SwitchParameter |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-InputObject
Spécifie l’objet .NET qui génère les événements. Entrez une variable contenant l'objet, ou tapez une commande ou une expression qui l'obtient.
Type: | PSObject |
Position: | 0 |
Valeur par défaut: | None |
Obligatoire: | True |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-MaxTriggerCount
Spécifie le nombre maximal de fois où un événement peut être déclenché.
Type: | Int32 |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-MessageData
Spécifie toutes les données supplémentaires à associer à cet abonnement aux événements. La valeur de ce paramètre apparaît dans la propriété MessageData de tous les événements associés à cet abonnement.
Type: | PSObject |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-SourceIdentifier
Spécifie un nom que vous sélectionnez pour l'abonnement. Le nom que vous sélectionnez doit être unique dans la session active. La valeur par défaut est le GUID que PowerShell affecte.
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.
Type: | String |
Position: | 100 |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
-SupportEvent
Indique que l’applet de commande masque l’abonnement aux événements. Utilisez ce paramètre lorsque l’abonnement actuel fait partie d’un mécanisme d’inscription d’événements plus complexe et ne doit pas être découvert indépendamment.
Pour afficher ou annuler un abonnement créé avec le paramètre SupportEvent, utilisez le paramètre Force des applets de commande et Unregister-Event
des Get-EventSubscriber
applets de commande.
Type: | SwitchParameter |
Position: | Named |
Valeur par défaut: | None |
Obligatoire: | False |
Accepter l'entrée de pipeline: | False |
Accepter les caractères génériques: | False |
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.
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 cette session, la file d'attente d'événements est ignorée et l'abonnement aux événements est annulé.