Partager via


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 de requêtes de données. La différence est l’utilisation d’une classe spéciale appelée « meta_class », qui identifie la requête comme 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 uniquement en charge « * ». 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 et des définitions Win32_LogicalDisk pour 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 équivaut à appeler la méthode IWbemServices ::GetObject ou la méthode IWbemServices ::GetObjectAsync avec le paramètre de chemin d’accès de l’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 __Dynasty WMI 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

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

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")