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 |
|
Libreria dei tipi |
|
DLL |
|
CLSID |
CLSID_SWbemServices |
IID |
IID_ISWbemServices |