Scripting Windows by HABERT (Antoine) - BRAVO (Cédric)

Scripting Windows by HABERT (Antoine) - BRAVO (Cédric)

Auteur:HABERT (Antoine) - BRAVO (Cédric) [BRAVO, HABERT -]
La langue: fra
Format: epub
Tags: Informatique
Éditeur: O'Reilly
Publié: 2005-08-09T09:15:14+00:00


Scripting Windows

148

DEUXIÈME PARTIE

Autre méthode de surveillance : surveiller les services

On peut dans certains cas utiliser une approche différente de la boucle récursive pour

faire de l’audit. Prenons l’exemple suivant pour illustrer cette nouvelle approche, qui

peut être plus simple à mettre en œuvre suivant vos affinités.

Problématique

On vous demande de créer un script permettant d’auditer le changement d’état des

services sur une machine afin de voir si ce sont ces changements qui poseraient des

problèmes à une application en cours de test. Le test doit s’effectuer toutes les cinq

secondes et doit vous remonter tout changement d’état intervenant.

Méthode de résolution

Nous allons nous pencher sur WMI pour régler ce problème. Tout d’abord, nous

créons la requête permettant d’auditer la classe Win32_Service.

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" _

& "strComputer & "\root\cimv2")

Set colServices = objWMIService.ExecNotificationQuery(_

"SELECT * FROM __instancemodificationevent " &_

"WITHIN 10" &_

"WHERE TargetInstance " &_

"ISA 'Win32_Service'")

Set objService = colServices.NextEvent

Avant de tester le changement d’état, nous allons créer une boucle infinie plutôt

qu’une boucle récursive comme dans l’exemple précédent :

' on définit un compteur égal à 0

i = 0

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" _

& "strComputer & "\root\cimv2")

Set colServices = objWMIService.ExecNotificationQuery(_

"SELECT * FROM __instancemodificationevent " &_

"WITHIN 10" &_

"WHERE TargetInstance " &_

"ISA 'Win32_Service'")

© Groupe Eyrolles, 2005

Techniques courantes d’administration système

149

CHAPITRE 8

' Création d'une boucle se répétant à l'infini

Do While i=0

Set objService = colServices.NextEvent

' ici se situera notre code'

Loop

Comme le compteur i sera toujours égal à 0, notre code se répétera à l’infini. On

pourrait directement faire une boucle de type :

Do

' code

Loop

Mais l’introduction d’un compteur permet dans ce cas de pouvoir aussi stopper le

script si le besoin s’en fait sentir. Attention : pour stopper ce type de script sans fin, il

faut passer par le gestionnaire de tâches et terminer le processus wscript.exe lié au

script.

Complétons maintenant notre requête de modification d’état.

Cette requête teste toutes les dix secondes un changement dans la classe service.

Nous souhaitons vérifier le changement de statut d’un service, nous avons deux pro-

priétés à notre disposition :

• TargetInstance.state qui renvoie l’état actuel du service (démarré, stoppé,

arrêté) lors de la requête en cours.

• PreviousInstance.State qui donne l’état précédent, c’est-à-dire celui obtenu

lors de la requête précédente.

Nous allons donc faire un test sur ces deux propriétés pour voir si elles sont diffé-

rentes, et faire un echo du nom du service ayant changé d’état.

Chap8vbs6.vbs : test du changement d’état d’un des services sur une station locale

' on définit un compteur égal à 0

i = 0

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" _

& "strComputer & "\root\cimv2")

Set colServices = objWMIService.ExecNotificationQuery(_

"SELECT * FROM __instancemodificationevent " &_

"WITHIN 10" &_

WHERE TargetInstance " &_

ISA 'Win32_Service'")

© Groupe Eyrolles, 2005

Scripting Windows

150

DEUXIÈME PARTIE

Chap8vbs6.vbs : test du changement d’état d’un des services sur une station locale

' Création d'une boucle se répétant à l'infini

Do While i=0

Set objService = colServices.NextEvent

' Test de l'état du service par rapport à la requête précédente

If objService.TargetInstance.State <> _

objService.PreviousInstance.State Then

wscript.echo "le service" & objService.TargetInstance.Name &_

" a changé d'état"

End If

Loop

Il est possible de sortir du script à la détection du premier changement, en changeant

la valeur du compteur i. Cet exemple montre comment quitter le script une fois le

premier changement découvert :

' on définit un compteur égal à 0

i = 0

strComputer = ".



Télécharger



Déni de responsabilité:
Ce site ne stocke aucun fichier sur son serveur. Nous ne faisons qu'indexer et lier au contenu fourni par d'autres sites. Veuillez contacter les fournisseurs de contenu pour supprimer le contenu des droits d'auteur, le cas échéant, et nous envoyer un courrier électronique. Nous supprimerons immédiatement les liens ou contenus pertinents.