Voici un projet sur lequel je travail depuis quelques temps et qui consistera à exposer aux débutants l'utilisation du WMI dans leurs scripts.
Tout d'abord, pourquoi je me lance dans l'exemple du WMI. C'est simple, c'est maintenant une des choses incontournables que j'utilise dans mes scripts sur mon lieu de travail.
Tout d'abord la définition du mot en lui même. WMI signifie Windows Management Instrumentation.
Concrètement, la WMI est la base même de Windows, dans l'infrastructure de l'opérating system. Beaucoup d'informations en relation avec la WMI sont trouvable à cette page. Je ne m'attarderait pas dessus car tous y est trés bien expliqué (bien que ce soit en anglais).
Passons au but de cet exemple, les class WMI. Les class WMI sont ancrées dans votre system d'exploitation, je ne sait pas si il y a échange d'informations avec les clés de registre, car c'est encore un niveau d'en dessous dans Windows.
Concrètement, les class WMI regroupent toutes les informations sur votre ordinateur. Il en existe énormément, et faire une liste serait fastidieux et une perte de temps. Vous pourrez trouver toute la liste de ces class à cette page de MSDN
J'en arrive à l'utilisation de ces class. Tout d'abord, il vous faut trouver dans la liste sur votre gauche de cette page l'information dans laquel il est possible que ce que vous voulez soit retourné. Dans mon le cadre de mon travail, j'utilise beaucoup ces class car elles me permettent de remonter des informations sur les postes distant qui sont sur mon réseau d'entreprise.
Dans mon exemple, je vais ainsi retourner le nom de mon ordinateur. Evidement comme je ne suis pas sur mon lieu de travail, je vais utiliser l'adresse IP de ma propre carte réseau qui est 127.0.0.1
Dans le cadre d'une utilisation sur un réseaux local, il suffira de mettre l'adresse IP du poste cibler, et si vous êtes équipé comme je le suis d'un serveur DHCP/DNS, alors vous pourrez utilisez aussi le nom de la machine sur le réseau pour vos scripts.
Tout d'abord, il vous faut trouver la class qu'il faut. Ainsi que l'information qui nous interesse, ici le nom :
Ce qui nous donne :
Code : Tout sélectionner
$strComputer = "127.0.0.1" ;Nom ou adresse IP du poste ciblé
$objWMIService = ObjGet("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& $strComputer & "\root\cimv2") ;création de l'objet
$colComputers = $objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem") ;Définition de la class utilisé
For $objComputer in $colComputers
ConsoleWrite( @CRLF & "Nom du poste : " & $objComputer.Name & @CRLF) ;Ecriture de l'info choisit dans la class
Next
Exemple :
Code : Tout sélectionner
$strComputer = "127.0.0.1"
$objWMIService = ObjGet("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& $strComputer & "\root\cimv2")
$colComputers = $objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")
For $objComputer in $colComputers
ConsoleWrite(@CRLF & "Nom du poste : " & $objComputer.Name & @CRLF)
ConsoleWrite("Username du poste : " & $objComputer.Username & @CRLF)
ConsoleWrite("SystemType du poste : " & $objComputer.SystemType & @CRLF)
ConsoleWrite("TotalPhysicalMemory du poste : " & $objComputer.TotalPhysicalMemory & @CRLF)
ConsoleWrite("WakeUpType du poste : " & $objComputer.WakeUpType & @CRLF)
ConsoleWrite("Workgroup du poste : " & $objComputer.Workgroup & @CRLF)
Next
Une dernière chose important à savoir, si vous consultez des informations sur des postes distant du réseau local, le temps d'exécution de votre script et de remonté des informations dépendra de la vitesse de votre connection.
Voila voila,
=> Des Questions ? Posez les ci dessous !
Jérôme