GetWMIProperty
Écrit par Gilles LAURENT   
17-02-2009

Afficher la valeur d'une propriété WMI en ligne de commande

Le système de gestion de plateformes Microsoft Windows WMI est maintenant incontournable et indispensable à tout Administeur de parc informatique. Ce système basé sur des fournisseurs (providers) permet de contrôler et/ou d'interroger divers paramètres du système d'exploitation, que celui-ci soit local ou distant. Ce système de gestion peut être utilisé à partir de plusieurs langages (C, C++, .NET, Powershell ...) et également en scripting (Perl, VBScript, JScript, ...) via les interfaces COM. Il existe également, depuis Windows XP, une implémentation en mode Console de ce système : WMIC. Cette console permet à tout administrateur de réaliser divers opérations WMI en ligne de commande.  Toutefois, l'inconvénient majeur est qu'il n'est pas possible d'utiliser la console WMIC dans un script d'ouverture de session car celle-ci nécessite d'être exécutée sous l'autorité de l'administrateur local. C'est donc dans un but de simplification que je me suis lancé dans le développement de l'outil GetWMIProperty pour les besoins d'un client. Cet outil permet d'une part de s'exécuter sous l'autorité d'un utilisateur lambda facilitant ainsi la récupération d'une propriété WMI et d'autre part d'être compatible avec la plateforme Windows 2000, celle-ci étant également la cible.

Note: Il est important de noter que l'outil similaire wmisu écrit par Michel Claveau [MVP] permet de réaliser les mêmes opérations. Vous trouverez ici l'annonce officielle de l'auteur Postée sur le Forum Microsoft Scripting. Contrairement à GetWMIProperty, wmisu s'appuie sur le Framework .NET

Un exemple permettant de récupérer le nom du bios de la machine locale :

WSH D:\Test> ' lecture du nom du bios de la machine locale                      
WSH D:\Test> @GetWMIProperty -class Win32_Bios -property Name                   
Insyde Software MobilePRO BIOS Version 4.00.00                                  
                                                                                

Historique:

Version 1.0.0.7 - 20200819
                        - Introduction du paramètre optionnel IfNullOrEmpty
                        Ce paramètre permet de spécifier une valeur par défaut de type String qui sera
                        utilisée si la propriété WMI retourne un variant nul ou vide.

                        Thanks to Petr L for coming up with the idea for this update.

Version 1.0.0.6 - 20140701
                      - Customer request*
                        Support du tiret '-' ( ANSI code 0x2d ) comme séparateur

Version 1.0.0.5 - 20120501
                      - Ajout de l'argument -privilege permettant de spécifier les privilèges présents dans le
                        jeton (token) utilisateur à activer ou désactiver. Cet argument est nécessaire pour être
                        en mesure, par exemple, de lire les événements du journal "Sécurité". Dans ce cas
                        la syntaxe à utiliser sera :  -privilege "Security". La liste des privilèges peut être
                        consultée sur le MSDN.

Version 1.0.0.4 - 20120426
                      - Modification du mode de traitement de la requête WMI. La requête est maintenant
                        exécutée en mode asynchrone (wbemFlagReturnImmediately). Ceci permet de limiter
                        la consommation de ressources système pouvant provoquer un crash lors de requêtes
                        retournant un volume important de données comme par exemple l'interrogation de la
                        classe WMI Win32_NTLogEvent

Version 1.0.0.3 - 20120317
                      - Correction d'une erreur de dépassement de capacité (buffer overflow). Cette erreur n'est
                        détectée que sous Windows Vista et versions supérieures grâce à la fonction DEP (Data
                        Execution Prevention). Cette mise à jour est donc fortement conseillée

Version 1.0.0.2 - 20111228
                      - Ajout de l'argument -delimiter permettant de spécifier un délimiteur pour séparer
                        les valeurs de propriété. Le délimiteur par défaut est maintenant le caractère ";"

Version 1.0.0.1 - 20090218
                      - Première Release Publique

Plateformes supportées:
Windows 2000 et versions supérieures

Usage:

GetWMIProperty <options>

Aide en ligne:

GetWMIProperty v1.0.0.7 (c) 2009-2020 Gilles LAURENT
Gets a WMI property (or set of properties) from command line
Usage : GetWMIProperty <options>

Options:

-Class <class>          Specifies the name of a class to obtain data from
-Delimiter <delimiter>  Specifies a character or string to use as delimiter
-Filter <filter>        Specifies a WHERE clause (WQL) to use as a filter
-FirstInstance          Display only the first instance of the collection
-IfNullOrEmpty <string> Default value if the property returns null or empty
-List                   Display the property name with the property value
-Namespace <namespace>  Specifies the WMI namespace, default to root\cimv2
-Privilege <privilege>  Specifies a privilege (or set of privileges) to grant
-Property <property>    Specifies a property (or set of properties) to retrieve

Examples:

  GetWMIProperty -Namespace root\cimv2
  GetWMIProperty -Namespace root\default
  GetWMIProperty -Class Win32_Bios
  GetWMIProperty -Class Win32_Process -List
  GetWMIProperty -Class Win32_Process -Property Name,Handle
  GetWMIProperty -Class Win32_Process -Property Name -Filter "HandleCount>500"
  GetWMIProperty -Class Win32_DiskDrive -Property Capabilities -List

Téléchargement:

Guide PDF: -
Archive: GetWMIProperty.zip

Dernière mise à jour : ( 19-08-2020 )