Condividi tramite


Istruzione SELECT per le query dello schema

Le query sui dati dello schema usano l'istruzione SELECT con una sintassi simile a quella per le query sui dati. La differenza è l'uso di una classe speciale denominata "meta_class", che identifica la query come query dello schema.

Nell'esempio seguente vengono richieste tutte le definizioni di classe all'interno dello spazio dei nomi corrente.

SELECT * FROM meta_class

Le query dello schema supportano solo "*". Per limitare l'ambito delle definizioni restituite, un provider può aggiungere una clausola WHERE che specifica una determinata classe.

Nell'esempio seguente viene illustrato come aggiungere una clausola WHERE per specificare una determinata classe.

SELECT * FROM meta_class WHERE __this ISA "Win32_LogicalDisk"

La proprietà speciale denominata __this identifica la classe di destinazione per una query dello schema. Si noti che l'operatore ISA deve essere usato con la proprietà __this per richiedere definizioni per le sottoclassi della classe di destinazione. La query precedente restituisce la definizione per la classe e le definizioni di Win32_LogicalDisk per tutte le sottoclassi.

Nell'esempio seguente viene illustrato come richiedere una definizione di classe per una singola classe usando la proprietà di sistema __Class .

SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"

Questa query equivale a chiamare il metodo IWbemServices::GetObject o IWbemServices::GetObjectAsync con il parametro percorso oggetto impostato su "Win32_LogicalDisk".

L'esempio di codice VBScript seguente recupera tutte le classi figlio di una classe WMI di primo livello. La proprietà di sistema WMI __Dynasty contiene il nome della classe di primo livello da cui deriva una classe, che è possibile usare per recuperare tutte le classi in uno spazio dei nomi derivato da una classe di primo livello, inclusa quella 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

Il codice VBScript seguente recupera classi figlio immediate per una 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

Il codice VBScript seguente recupera le classi di primo livello. Per tutte le classi di primo livello in uno spazio dei nomi WMI, la proprietà di sistema __Superclass è Null. Pertanto, è possibile recuperare le classi di primo livello cercando una 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")