Instruction SELECT pour les requêtes de schéma

Les requêtes de données de schéma utilisent l’instruction SELECT avec une syntaxe similaire à celle utilisée pour les requêtes de données. La différence réside dans l’utilisation d’une classe spéciale appelée « meta_class », qui identifie la requête en tant que requête de schéma.

L’exemple suivant demande toutes les définitions de classe qui se trouvent dans l’espace de noms actuel.

SELECT * FROM meta_class

Les requêtes de schéma prennent en charge uniquement « * ». Pour limiter l’étendue des définitions retournées, un fournisseur peut ajouter une clause WHERE qui spécifie une classe particulière.

L’exemple suivant montre comment ajouter une clause WHERE pour spécifier une classe particulière.

SELECT * FROM meta_class WHERE __this ISA "Win32_LogicalDisk"

La propriété spéciale appelée __this identifie la classe cible pour une requête de schéma. Notez que l’opérateur ISA doit être utilisé avec la propriété __this pour demander des définitions pour les sous-classes de la classe cible. La requête précédente retourne la définition de la classe Win32_LogicalDisk et les définitions de toutes ses sous-classes.

L’exemple suivant montre comment demander une définition de classe pour une classe unique à l’aide de la propriété système __Class.

SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"

Cette requête revient à appeler la méthode IWbemServices::GetObject ou IWbemServices::GetObjectAsync avec le paramètre de chemin d’accès d’objet défini sur « Win32_LogicalDisk ».

L’exemple de code VBScript suivant récupère toutes les classes enfants d’une classe WMI de niveau supérieur. La propriété système WMI __Dynasty contient le nom de la classe de niveau supérieur à partir de laquelle une classe est dérivée, que vous pouvez utiliser pour récupérer toutes les classes d’un espace de noms dérivé d’une classe de niveau supérieur, y compris cette classe.

' Retrieve immediate child classes for Cim_DataFile

Set objWmi = GetObject ("winmgmts:root\cimv2")

Set colClasses = objWmi.ExecQuery _ 
    ("Select * From meta_class " _
    & "Where __Dynasty = 'Win32_CurrentTime'")

For Each objClass In colClasses 
    WScript.Echo objClass.SystemProperties_("__Class")
Next

Le VBScript suivant récupère une classe enfant immédiate pour une classe WMI.

' Retrieve immediate child classes for Cim_DataFile

Set objWmi = GetObject ("winmgmts:root\cimv2")

Set colClasses = objWmi.ExecQuery _ 
    ("Select * From meta_class " _
    & "Where __Superclass = 'Cim_DataFile'")

For Each objClass In colClasses 
    WScript.Echo objClass.SystemProperties_("__Class")
Next

Le VBScript suivant récupère les classes de niveau supérieur. Pour toutes les classes de niveau supérieur d’un espace de noms WMI, la propriété système __Superclass est Null. Par conséquent, il est possible de récupérer les classes de niveau supérieur en recherchant une superclasse Null.

 Retrieve top level classes in root\cimv2

Set objWmi = GetObject ("winmgmts:root\cimv2")

Set colClasses = objWmi.ExecQuery _
    ("Select * From meta_class Where __Superclass Is Null")

For Each objClass In colClasses
    WScript.Echo objClass.SystemProperties_("__Class")