Metodo SWbemServices.ExecQuery

Il metodo ExecQuery dell'oggetto SWbemServices esegue una query per recuperare gli oggetti. Questi oggetti sono disponibili tramite l'insieme SWbemObjectSet restituito.

Questo metodo viene chiamato in modalità semisynchronous. Per altre informazioni, vedere Chiamata di un metodo.

Per una spiegazione di questa sintassi, vedere Document Conventions per l'API di scripting.

Sintassi

objWbemObjectSet = .ExecQuery( _
  ByVal strQuery, _
  [ ByVal strQueryLanguage ], _
  [ ByVal iFlags ], _
  [ ByVal objWbemNamedValueSet ] _
)

Parametri

strQuery

Obbligatorio. Stringa contenente il testo della query. Questo parametro non può essere vuoto. Per altre informazioni sulla compilazione di stringhe di query WMI, vedere Esecuzione di query con WQL e informazioni di riferimento su WQL .

strQueryLanguage [facoltativo]

Stringa contenente il linguaggio di query da utilizzare. Se specificato, questo valore deve essere "WQL".

iFlags [facoltativo]

Intero che determina il comportamento della query e determina se la chiamata restituisce immediatamente. Il valore predefinito per questo parametro è wbemFlagReturnImmediately. Questo parametro può accettare i valori seguenti.

wbemFlagForwardOnly (32 (0x20))

Fa sì che venga restituito un enumeratore forward-only. Gli enumeratori forward-only sono in genere molto più veloci e usano meno memoria rispetto agli enumeratori convenzionali, ma non consentono chiamate a SWbemObject.Clone_.

wbemFlagBidirectional (0 (0x0))

Fa sì che WMI mantenga i puntatori agli oggetti dell'enumerazione fino a quando il client non rilascia l'enumeratore.

wbemFlagReturnImmediately (16 (0x10))

Fa sì che la chiamata venga restituita immediatamente.

wbemFlagReturnWhenComplete (0 (0x0))

Determina il blocco di questa chiamata fino al completamento della query. Questo flag chiama il metodo in modalità sincrona.

wbemQueryFlagPrototype (2 (0x2))

Usato per la creazione di prototipi. Questo flag impedisce l'esecuzione della query e restituisce un oggetto simile a un oggetto risultato tipico.

wbemFlagUseAmendedQualifiers (131072 (0x20000))

Fa in modo che WMI restituisca i dati di modifica della classe con la definizione della classe di base. Per altre informazioni, vedere Localizzazione delle informazioni sulla classe WMI.

objWbemNamedValueSet [facoltativo]

In genere, questo non è definito. In caso contrario, si tratta di un oggetto SWbemNamedValueSet i cui elementi rappresentano le informazioni di contesto che possono essere utilizzate dal provider che sta servendo la richiesta. Un provider che supporta o richiede tali informazioni deve documentare i nomi dei valori riconosciuti, il tipo di dati del valore, i valori consentiti e la semantica.

Valore restituito

Se non si verifica alcun errore, questo metodo restituisce un oggetto SWbemObjectSet . Si tratta di una raccolta di oggetti che contiene il set di risultati della query. Il chiamante può esaminare la raccolta usando l'implementazione di raccolte per il linguaggio di programmazione in uso. Per altre informazioni, vedere Accesso a una raccolta.

Codici di errore

Dopo il completamento del metodo ExecQuery , l'oggetto Err può contenere uno dei codici di errore nell'elenco seguente.

wbemErrAccessDenied - 2147749891 (0x80041003)

L'utente corrente non dispone dell'autorizzazione per visualizzare il set di risultati.

wbemErrFailed - 2147749889 (0x80041001)

Errore non specificato.

wbemErrInvalidParameter - 2147749896 (0x80041008)

È stato specificato un parametro non valido.

wbemErrInvalidQuery - 2147749911 (0x80041017)

La sintassi della query non è valida.

wbemErrInvalidQueryType - 2147749912 (0x80041018)

Il linguaggio di query richiesto non è supportato.

wbemErrOutOfMemory - 2147749894 (0x80041006)

Memoria insufficiente per completare l'operazione.

Commenti

ExecQuery è una delle chiamate più usate per recuperare informazioni WMI. Una chiamata standard a ExecQuery è simile alla seguente:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service where Name='Alerter'")
For Each objService in colServices
    Return = objService.StopService()
    If Return <> 0 Then
        Wscript.Echo "Failed " &VBNewLine & "Error code = " & Return 
    Else
       WScript.Echo "Succeeded"
    End If
Next

Si noti che si crea l'oggetto SWbemServices con un moniker che rappresenta lo spazio dei nomi e la sicurezza appropriati, quindi eseguire la chiamata ExecQuery tramite il servizio. Per una discussione più completa, vedere Creazione di uno script WMI ed enumerazione WMI.

Analogamente al metodo InstancesOf , il metodo ExecQuery restituisce sempre un insieme SWbemObjectSet . Di conseguenza, lo script WMI deve enumerare la raccolta restituita da ExecQuery per accedere a ogni istanza di risorsa gestita nella raccolta, come illustrato di seguito:

strComputer = "."
Set objSWbemServices = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colSWbemObjectSet = objSWbemServices.ExecQuery _
   ("SELECT * FROM Win32_Service")
For Each objSWbemObject In colSWbemObjectSet
    Wscript.Echo "Name: " & objSWbemObject.Name
Next

Altri metodi SWbemServices che restituiscono un oggetto SWbemObjectSet includono AssociatorsOf, ReferencesTo e SubclassesOf.

Non è un errore che la query restituisca un set di risultati vuoto. Il metodo ExecQuery restituisce proprietà chiave indipendentemente dal fatto che la proprietà della chiave sia richiesta nell'argomento strQuery . Se si verifica un errore durante l'esecuzione di questo metodo e non si utilizza il flag wbemFlagReturnImmediately , l'oggetto Err non viene impostato finché non si tenta di accedere al set di oggetti restituito. Se tuttavia si utilizza il flag wbemFlagReturnWhenComplete , l'oggetto Err viene impostato quando viene chiamato il metodo ExecQuery .

Esistono limiti al numero di parole chiave AND e OR che possono essere usate nelle query WQL. Un numero elevato di parole chiave WQL usate in una query complessa può causare la restituzione di WMI del codice di errore WBEM_E_QUOTA_VIOLATION come valore HRESULT . Il limite di parole chiave WQL dipende dalla complessità della query.

Esempio

Nell'esempio di codice VBScript seguente vengono individuate tutte le unità disco nel computer locale e viene visualizzato l'ID dispositivo e il tipo di unità disco.

Set colDisks = GetObject( _
    "Winmgmts:").ExecQuery("Select * from Win32_LogicalDisk")
For Each objDisk in colDisks
 
    Select Case objDisk.DriveType
        Case 1
            Wscript.Echo "No root directory. Drive type could not be determined."
        Case 2
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Removable drive" 
        Case 3
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Local hard disk" 
        Case 4
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Network disk" 
        Case 5
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = Compact disk" 
        Case 6
            Wscript.Echo "DeviceID= "& objDisk.DeviceID & "  DriveType = RAM disk" 
        Case Else
            Wscript.Echo "Drive type could not be determined."
    End Select
Next

Requisiti

Requisito Valore
Client minimo supportato
Windows Vista
Server minimo supportato
Windows Server 2008
Intestazione
Wbemdisp.h
Libreria dei tipi
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

Vedi anche

SWbemServices

SWbemServices.Get

Esecuzione di query con WQL

Creazione di uno script WMI

Enumerazione WMI