Windows PowerShell : Répondre aux événements WMI

Windows se charge correctement des tâches de suivi, de notification et de réponse aux événements système, mais Windows PowerShell peut également les effectuer.

Don Jones

L'une des choses intéressantes sur le système d'exploitation Windows est la prise en charge pour les événements. Chaque fois que quelque chose se produit dans le système d'exploitation, il génère un événement. Bits de code, tels que les applications peuvent s'inscrire pour être informé des événements spécifiques afin de pouvoir répondre avec une action. Par exemple, lorsque vous cliquez sur un bouton dans une boîte de dialogue, l'application reçoit une notification d'événement “ clic ” et sait qu'il doit pour faire tout ce qui est supposé faire lorsqu'un utilisateur clique sur ce bouton.

WMI (Windows Management Instrumentation) peut également produire des événements, et vous pouvez vous inscrire à Windows PowerShell v2 pour recevoir ces événements. Vous pouvez ensuite utiliser l'interpréteur de commandes pour exécuter les commandes que vous préférez en réponse à ces événements. WMI déclenche en général un d'un très petit nombre d'événements, mais elle peut le faire pour une grande variété de classes WMI différentes.

Il existe trois points clés pour l'utilisation d'événements WMI :

  • le fait de savoir quels événements vous souhaitez
  • la connaissance de la classe pour laquelle vous souhaitez que l'événement
  • à l'aide de la cmdlet WMIEvent du Registre pour vous inscrire aux notifications d'événements

Événements simples

Certaines classes WMI génèrent des événements. Par exemple, la classe Win32_ProcessStartTrace génère des événements chaque fois qu'un processus démarre. Il est également le faire dans d'autres situations. Lorsque l'événement pour un nouveau processus est déclenché, il a un identificateur de source de “ Process Started. ” Inscrire les événements, vous exécuterez cette commande :

Register-WmiEvent –class "Win32_ProcessStartTrace" 
–sourceIdentifier "Process Started"

Bien entendu, tout simplement savoir qu'un processus de démarrage n'est pas utile. Vous souhaiterez peut-être définir une action pour ouvrir une session du processus, envoyer un message électronique ou même arrêter le processus.

Exécutez Get-EventSubscriber pour voir l'abonnement de notification d'événements que vous venez de créer. Pour supprimer toutes les inscriptions d'événements, exécutez Get-EventSubscriber | événement de suppression de l'inscription. Vous pouvez également utiliser des événements d'annuler l'enregistrement pour supprimer un abonnement par numéro d'identification spécifique.

Amélioration des événements

Certains des événements au niveau du système que WMI peut produire sont encore plus utiles. Par exemple, un événement appelé __instancecreationevent est déclenché chaque fois qu'une nouvelle instance d'une classe WMI est créée ;__InstanceDeletionEvent est déclenché chaque fois qu'une instance est supprimée. Cela peut sembler utile, mais réfléchissez il, presque tous les éléments du matériel de système d'exploitation et d'ordinateur est représentée par une instance d'une classe WMI. Par exemple, Win32_LogicalDisk obtiendra une nouvelle instance lorsque vous connectez un périphérique de stockage amovible. Win32_Process perdrez une instance lorsqu'un processus s'arrête.

Vous souhaitez afficher un message lorsque les utilisateurs insèrent une nouvelle clé USB ?

Register-wmievent –query "select * from __instancecreationevent within 5 where targetinstance isa 'win32_logicaldisk'" –action { Write "You had better not put any proprietary information on that!" }

Cette requête peut être assez difficile à décrypter, voici ce qu'il fait :

  • SELECT * FROM __instancecreationevent (c'est à la façon dont les deux traits de soulignement de l'événement le name,) simplement Spécifie que toutes les propriétés de cet événement doivent être récupérées.
  • Au sein de 5 indique que nous voulons uniquement, recherchez les événements toutes les cinq secondes. Ne fixez ce nombre trop faible ou que vous obtiendrez beaucoup de puissance de traitement a passé sur la vérification en permanence les mises à jour.
  • WHERE TARGET ISA de l'INSTANCE «Win32_LogicalDisk»Indique à WMI que nous voulons uniquement les événements qui a créé une nouvelle instance de la classe Win32_LogicalDisk.

Enfin, le paramètre –action est un bloc de script ; entre {accolades} — qui contient l'action que nous voulons de se produire lorsque l'événement est déclenché.

En utilisant le paramètre-ComputerName inscrire les événements qui se produisent sur un ordinateur distant est une astuce. Vous devez être administrateur local sur l'ordinateur distant et l'action se produit sur votre ordinateur, et non sur celui à distance.

Comme un ailleurs, ne pas être tenté d'inscrire des événements de création de la classe CIM_DataFile qui représente les fichiers sur disque par exemple. WMI n'est pas très efficace pour surveiller la création d'un fichier. Il va sans doute manquer des événements et peut imposer une surcharge assez importante pour tenter d'intercepter tous les éléments.

Section «avertissements» et astuces

Bien sûr, réponses à vos événements va continuer d'uniquement tant que l'interpréteur de commandes est exécuté. Lorsque vous fermez le shell, ou qu'il ferme lui-même pour une raison quelconque, l'inscription d'événements a disparu.

Qui rend les événements WMI un peu moins utiles pour l'exécution sur des ordinateurs des utilisateurs ’, parce que vous êtes peu probable disposer le shell et en cours d'exécution sur l'ordinateur de tout le monde à tout moment. Cela peut être une astuce très utile, cependant, pour la surveillance des processus ou d'autres éléments sur des serveurs dans lequel vous disposez de davantage de contrôle

Dans le scriptblock –action, vous avez accès à un args $ appelée variable automatique, qui contient les arguments sont passés à partir de l'événement. Utilisez écriture $ args dans le scriptblock –action pour voir quels arguments existent pour un événement WMI donné.

Lire un peu plus sur les événements WMI et les commandes d'environnement, sur la de surveillance des événements WMI TechNet la page .

Don Jones

Don Jones est le fondateur de concentré de technologie et les réponses aux questions sur Windows PowerShell et d'autres technologies à ConcentratedTech.com. Il est également un auteur pour Nexus.Realtimepublishers.com que la plupart de ses livres rend disponible en tant que libres éditions électroniques par le biais de son site web.

Contenu associé