WMI, PHP et plein d’autres trucs en trois ou quatre lettres (part 2)

Avant de lire cette deuxième partie, (re)lisez la première, merci. Je prends la responsabilité de l’infinite loop qui en résultera.

Des problèmes apportés par la délocalisation dans un PVD de la traduction des noms de services chez Microsoft

Avant de jouer avec wbemtest, il y a un tout petit truc à savoir : WMI est activé par défaut sur les versions de Windows postérieures à XP. Donc si c’est votre cas, vous n’allez pas avoir à faire grand chose de ce chapitre. Par contre, si vous avez XP, il va falloir vérifier qu’un service est bien démarré.
En anglais, ce service est judicieusement appelé Windows Management Instrumentation (oh bah dites donc, en abrégé ça donne l’acronyme WMI, c’est pratique). Mais en français, patatras, le traducteur olmèque embauché à un salaire dérisoire a décidé que ce serait Infrastructure de gestion Windows et pas autre chose. Quel fourbe, ce patatras.

Donc cher lecteur, il ne te reste plus qu’à aller dans ton menu Démarrer préféré (si tu n’es pas sous Windows 8. Si c’est le cas, passe en 8.1 avec l’update de 3 Go qui suit, ça te simplifiera la vie, crois-moi), de cliquer sur Exécuter, et de taper dans la joie et l’allégresse services.msc tout en écrasant délicatement la touche Entrée de ton clavier pour finir.

Et sous tes yeux ébahis, tu verras apparaître une fenêtre similaire à ceci :

La console services.msc
Sinon blogger, tu la centres quand tu veux et avec la taille que j’ai demandé, la capture d’écran, hein.

Si le service est démarré, tout va bien, sinon tu le démarres et on n’en parle plus. Et en plus, tu gagnes un process svchost.exe à l’affaire, tu vois que tu n’es pas venu ici pour rien. Et si tu préfères la ligne de commande, tu peux aussi taper net start winmgmt et le tour est joué.

Tu peux pas test

Enfin si, et c’est justement ce que nous allons faire de ce pas, car je vous sens piaffer d’impatience depuis la fin de la première partie. Nous entrons désormais dans les choses sérieuses du vif du sujet, et pour cela, retournons d’une manière extatique dans le menu Démarrer, recliquons sur Exécuter, puis tapons de toutes nos forces webmtest avant de martyriser amoureusement la touche Entrée.

Et là bim, je dois faire une autre capture d’écran alors que ça ne sert à rien vu que vous allez avoir à peu de choses près la même chose que moi, c’est-à-dire ça :

Oui c’est moche mais c’est la beauté intérieure qui compte, voyons !

Inutile d’appeler GDF-Suez Engie ou les pompiers, car même si wbemtest ressemble à une usine à gaz, l’utilisation que nous allons en faire est des plus simplissimes qui soient. A tel point que vous vous en voudrez d’avoir cru que c’était compliqué.

Sans même vous poser de question, cliquez sur le bouton Connexion en haut à droite, la boîte de dialogue suivante apparaîtra comme par magie (mais en fait, c’est de la programmation tout ça, enfin j’espère que ce n’est pas un scoop pour vous) :

Ce n’est guère plus joli que la capture précédente, je sais.

On se détend, et on ne touche à rien pour l’instant. On regarde seulement en haut de la fenêtre, l’encadré Espace de noms (toi-même, hé). Ce petit “rootcimv2” a une certaine importance comme je vous le montrerai plus tard. Si vous avez bien vu et retenu, c’est bon, vous pouvez cliquer sur le bouton Connexion (oui encore, mais ce n’est pas le même bouton en fait).

Mais… il ne s’est rien passé !

Tu n’es pas très très observateur, jeune disciple. Regarde bien la première capture d’écran de wbemtest que je t’ai généreusement offert précédemment, puis ton wbemtest à toi. Tu ne vois rien de changé ? Non ? Toujours pas ? Regarde tous les boutons… ils ne sont plus grisés !

Maintenant que nous sommes connecté à l’espace de nom (ou namespace chez nos amis d’Outre-Rhin, qui parlent en général mieux anglais que nous) rootcimv2, nous allons pouvoir regarder un peu tout ce qui se cache là-dedans. Mais plutôt que d’y aller à l’aveuglette et de recourir aux arts divinatoires qui sont tout de même un peu foireux (hein, @levraihoroscope), nous allons demander gentiment mais fermement à wbemtest d’énumérer toutes les classes qu’il a à nous montrer. Et pour cela, rien de tel que de cliquer sur le bouton Énumérer les classes (quelle surprise).

Sauf qu’il ne va pas le faire tout de suite le bougre. Il va falloir faire des trucs mystérieux sur la boîte de dialogue qui surgit du fond de la nuit :

N’espérez pas voir de truc joli ici, allez dehors si c’est ce que vous recherchez

Enfer et damnation ! Que faire ? Comme je n’arrête pas de vous seriner que WMI, c’est SIMPLE, je vais vous le prouver une fois de plus : sélectionnez l’option Récursive, puis cliquez sur OK. Allez vous préparer un café instantané au micro-ondes et revenez vite fait devant votre PC, car même wbemtest a besoin d’un peu de temps pour énumérer toutes les classes du namespace, ça ne prend tout de même pas des heures. Attendez simplement qu’il affiche Terminé là où était écrit Opération en cours… quelques instant auparavant (et que vous n’aviez pas vu car vous étiez occupé à faire votre café).

En forçant un peu sur la bouteille, vous trouverez cette boîte de dialogue sexy. Si, si !

Mais qu’est-ce que c’est que ce truc encore…

Décidément, vous et moi faisons les mêmes réflexions, à quelques semaines d’intervalle cela dit. Ceci est une liste. De classes WMI. Et oui, il y en a beaucoup. 1078 chez moi, sur le PC sur lequel j’écris fiévreusement cet article, peut-être plus ou moins chez vous… Aucune importance.

Vous vous souvenez certainement de la classe Win32_ComputerSystem que j’avais évoqué dans la première partie. Et bien nous allons la chercher à la mano souris en faisant défiler la liste des classes grâce à l’ascenseur latéral. Comme elles sont classées (la classe pour des classes) dans l’ordre alphabétique, les Win32_quelquechose sont plutôt vers la fin. Donc allez-y franco, lâchez-vous, allez tout en bas, puis remontez la liste jusqu’à trouver la classe qui nous intéresse. Ne tenez pas compte (pour l’instant) des trucs entre parenthèses.

Ah tiens chez moi elle est plutôt vers le milieu en fait…

Et là je pousse un cri d’alarme retentissant (et pour une fois je ne déconne pas) : ne cliquez pas, JAMAIS, NEVER, sur le bouton Supprimer. Ni même sur Ajouter. Vraiment.

Bon ça ne cassera pas grand chose vu qu’au prochain reboot vous retrouverez tout, mais de manière règle, quand on ne sait pas, on ne fait pas, ou alors on se renseigne d’abord (proverbe d’informaticien du paléolithique, mais toujours valable de nos jours).

 Par contre, ce que vous pouvez faire (et ça vous aidera dans la suite de cet article), c’est de double-cliquer sur la classe Win32_ComputerSystem (avec du blabla entre parenthèses après). Et là, nul doute que les plus impressionnables d’entre vous s’agenouilleront devant le miracle qui s’accomplit :

Tadaaaaaaa ! (non ce n’est pas le son de WinXP mais les trompettes des anges, m’enfin !)

Oui, là ça devient magnifique. Moi-même je n’ai plus de mots pour décrire ça. Mais n’oubliez pas que WMI est la quintessence de la simplicité absolue, et regardez plus attentivement en plein milieu de la boîte de dialogue… Vous le voyez l’encadré Propriétés avec des machins (bah, des propriétés hein) dedans ?

Et bien figurez-vous que c’est dans ce fouillis qu’on va trouver ce qui nous intéresse, notamment Manufacturer et Model… Là, une petite explication s’impose. Le CIM_STRING après le nom de la propriété indique simplement son type (en l’occurrence, une chaîne, et pas le slip rabougri du cul que portent les filles). Ensuite vient la valeur de la propriétés. Si vous regardez attentivement, vous verrez des <null> partout.

Ta propriété en string !

C’est <null> ton truc !

Vu comme ça, oui, car ce que je vous ai fait faire jusqu’à présent ne permet que de lister les classes et leurs propriétés (ce qui évite le recours à la boule de cristal, assez peu efficace en la matière). L’idée est juste de vérifier qu’une propriété existe et son nom. Si vous voulez voir les valeurs, il va falloir jouer du WQL ! Oui, Microsoft aurait pu tout afficher du premier coup, on aurait tous gagné du temps, mais n’oubliez pas que les gens qui y travaillent sont un peu… spéciaux. Mais j’ai dans l’idée qu’afficher les valeurs de toutes les propriétés de toutes les classes pourrait prendre du temps, et même si ce n’est pas toujours de l’argent, c’est aussi le meilleur moyen de gaspiller de la RAM et de planter Windows (qui comme les grands féodaux, est fragile. Comprenne qui pourra.).

Je sais que vous mourrez d’impatience (ou d’ennui) et que vous rêvez (ou pas) de vous mettre tout de suite au WQL. Et bien c’est parti mon kiki.

Déjà, on va fermer les fenêtres (mais non, pas celle-là voyons, vous voyez bien qu’il fait chaud !) et revenir à la toute première de wbemtest, là où les boutons se sont dégrisés plus vite qu’au comico du coin. Cherchez bien et vous verrez un bouton Requête… (troisième colonne, deuxième ligne. Faut tout vous dire, hein). Cliquez dessus.

Dans le champ principal, tapez la seule requête que je vous ai appris jusqu’à présent :

Select * from Win32_ComputerSystem

Séquence émotion : votre première requête WQL

Puis cliquez sur Appliquer. Un court instant plus tard, cette fenêtre apparaît :

Et ben ? Tout ça pour ça ?

Un peu décevant, non ? Double cliquez sur la ligne Win32_ComputerSystem.Name=”lenomdevotrePC”. Rien ne se passe. Pendant que rien ne se passe, notez tout de même ce .Name=”lenomdevotrePC”. Si je vous dis que Name est une propriété de la classe Win32_ComputerSystem et que sa valeur est “lenomdevotrePC”, ça vous épate hein ? Attendez encore un peu, car au moment où vous y attendrez le moins, wbemtest va ouvrir une troisième fenêtre sans crier gare… (et d’ailleurs sans crier tout court) :

C’est un Lenovo !

Voilà, on retrouve la même fenêtre que tout à l’heure mais cette fois-ci, plus de <null> (enfin beaucoup moins) et surtout je sais désormais que j’ai un Lenovo, et même que c’est un 20B7S3BR0T et… mais c’est quoi ce nom pourri ?!

Du respect des traditions informatiques

C’est là qu’arrive la sempiternelle comparaison avec une bagnole. Vous vous rappelez de la Renault 18 TL de votre papa ? (ou tonton, ou voisin, peu importe, ce n’est qu’un exemple. Mes parents avaient une 1510 GLS, mais vous vous en foutez je parie).

Bon ben là, Manufacturer c’est Renault, ok, mais si vous voyez par exemple 13400 dans Model, pas d’inquiétude, c’est ce qu’on appelle le type. Il y en a plusieurs (plein, même) pour des R18 qui se ressemblent pourtant comme deux gouttes d’eau.

Pour savoir que votre type 13400 est une R18 TL, il va falloir chercher ça ailleurs. Traduit en informatique, pour mon Lenovo 20B7quelquechose, il faut chercher la bonne propriété dans une autre classe. Et c’est là qu’on rigole.

Parce que soit vous avez de l’intuition, soit vous n’en avez pas, et donc il va falloir farfouiller dans les classes. Comme je suis sympa, je vais vous épargner ça, et vous indiquer qu’il s’agit de la propriété Version (oui bon, même avec de l’intuition c’est pas super intuitif, je vous l’accorde) de la classe Win32_ComputerSystemProduct !

On vérifie tout ça ? Allez zou, retour à la case départ, Requête, et on tape ça :

Select * from Win32_ComputerSystemProduct

On a la fenêtre de résultat, double-clic comme tout à l’heure, on attend pas deux plombes ce coup-ci et…

C’était donc un ThinkPad T440 ! Et dire que si j’avais regardé sous l’écran…

Les plus perspicaces d’entre vous auront remarqué  :

  1. Qu’on retrouve mon type 20B7trucmuche mais cette fois-ci la propriété s’appelle Name ?!
  2. Que Win32_ComputerSystem.Manufacturer ou Win32.ComputerSystemProduct.Vendor c’est kif-kif au niveau valeur mais le nom de la propriété n’a rien à voir ?!
  3. Que j’ai flouté, pixellisé et barré certaines informations sur mes captures d’écran. Et oui, la vie privée c’est important, et un simple numéro de série peut en dire tellement long sur vous… Pensez-y…

WMI a beau être la simplicitude absolue, il ne fallait pas vous attendre à trouver facilement une classe et une propriété avec le nom qui correspond au truc exact qu’on cherche intuitivement, hein ! C’est une chose à la fois frustrante mais satisfaisante, vous allez voir. Frustrante parce que vous passerez forcément des heures à chercher LA classe et LA propriété que vous vouliez. Mais satisfaisante car quand vous la trouverez, vous serez bien content !

Cela dit, avec l’habitude, on devine rapidement ce genre de piège et le temps de recherche diminue drastiquement, à tel point qu’on finit par se dire “Hé, franchement, Microsoft, trop simple, là, tu me sous-estime…”.

Conclusion

Vous savez désormais faire des requêtes WQL toutes simples. Entraînez-vous, farfouillez dans les classes à l’aide de wbemtest, et notez les classes et les propriétés qui vous intéressent, vous serez étonné de voir ce qu’on peut récupérer comme informations.

En guise de devoirs pour la prochaine fois, trouvez la classe (ou les classes) et les propriétés qui permettent d’afficher le fabricant, le modèle, le nombre de cores et la vitesse maximale du processeur de votre PC… Je corrigerai en commentaires.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.