Automatiser les tâches d'administration avec VBScript, WSH, WMI, ADSI et les objets COM by Antoine Habert & Cédric Bravo
Auteur:Antoine Habert & Cédric Bravo [Habert, Antoine & Bravo, Cédric]
La langue: fra
Format: epub
Tags: sciences, Informatique
ISBN: 9782212050547
Google: BVE0eUiPnKEC
Éditeur: Eyrolles
Publié: 2011-07-07T21:09:33+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
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.
Histoires pornographiques by Q'Abé Valentine(2684)
Le chant de Wren 01 Marquée by Addison Cain(2682)
Le Glee magazine by littlesitter(2318)
Antoine Marcas T05 La Croix des Assassins by Giacometti et Ravenne(2175)
Fait maison n°1 by Cyril Lignac(2156)
Le petit traité Rustica de la pâtisserie maison - Plus de 100 recettes faciles (Les petits traités) (French Edition) by Martine Soliman(2097)
Le Roman des Croisades T1 La Croix et le Royaume by Michel Peyramaure(2035)
À la recherche du temps perdu 15 XV Le temps retrouvé 2 by Marcel Proust(2029)
À la recherche du temps perdu 05 V À l’ombre des jeunes filles en fleurs 3 by Marcel Proust(2000)
Les Micro-humains by Bernard Werber(1968)
La croix de Saint-Georges by Kent Alexander(1964)
Marianne T2- et l'inconnu de Toscane by Juliette Benzoni(1950)
Cal DONOVAN 01 Le livre de la croix by Cooper Glenn(1933)
Le Maître ou le tournoi de go by Kawabata Yasunari(1752)
LE POINT DE VUE DES ÉDITEURS by Farallon Islands(1745)
The Lying Game T5 , Crois de bois croix de fer by Sara Shepard(1743)
La cité des rêves by Don Winslow(1705)
Dans le murmure des feuilles qui dansent (A.M. ROM.FRANC) (French Edition) by Agnès Ledig(1615)
Substance secrète by Reichs Kathy(1555)