Teilen über


SWbemServices.ExecQuery-Methode

Die ExecQuery-Methode des SWbemServices-Objekts führt eine Abfrage aus, um Objekte abzurufen. Diese Objekte sind über die zurückgegebene SWbemObjectSet-Sammlung verfügbar.

Diese Methode wird im halbsynchronen Modus aufgerufen. Weitere Informationen finden Sie unter Aufrufen einer Methode.

Eine Erläuterung dieser Syntax finden Sie unter Dokumentkonventionen für die Skript-API.

Syntax

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

Parameter

strQuery

Erforderlich. Eine Zeichenfolge, die den Text der Abfrage enthält. Dieser Parameter darf nicht leer sein. Weitere Informationen zum Erstellen von WMI-Abfragezeichenfolgen finden Sie unter Abfragen mit WQL sowie in der Referenz zu WQL.

strQueryLanguage [optional]

Zeichenfolge, die die zu verwendende Abfragesprache enthält. Wenn angegeben, muss dieser Wert „WQL“ sein.

iFlags [optional]

Ganze Zahl, die das Verhalten der Abfrage bestimmt und steuert, ob dieser Aufruf sofort abgeschlossen wird. Der Standardwert für diesen Parameter lautet wbemFlagReturnImmediately. Dieser Parameter kann folgende Werte akzeptieren:

wbemFlagForwardOnly (32 (0x20))

Bewirkt, dass ein Forward-Only-Enumerator zurückgegeben wird. Forward-Only-Enumeratoren sind normalerweise viel schneller und beanspruchen weniger Arbeitsspeicher als herkömmliche Enumeratoren, lassen aber keine Aufrufe von SWbemObject.Clone_ zu.

wbemFlagBidirectional (0 (0x0))

Bewirkt, dass WMI Zeiger auf Objekte der Enumeration so lange beibehält, bis der Client den Enumerator freigibt.

wbemFlagReturnImmediately (16 (0x10))

Bewirkt, dass der Aufruf sofort abgeschlossen wird.

wbemFlagReturnWhenComplete (0 (0x0))

Bewirkt, dass dieser Aufruf so lange blockiert wird, bis die Abfrage abgeschlossen ist. Dieses Flag ruft die Methode im synchronen Modus auf.

wbemQueryFlagPrototype (2 (0x2))

Wird für die Prototyperstellung verwendet. Dieses Flag verhindert, dass die Abfrage ausgeführt wird, und gibt ein Objekt zurück, das wie ein typisches Ergebnisobjekt aussieht.

wbemFlagUseAmendedQualifiers (131072 (0x20000))

Bewirkt, dass WMI Klassenänderungsdaten mit der Basisklassendefinition zurückgibt. Weitere Informationen finden Sie unter Lokalisieren von WMI-Klasseninformationen.

objWbemNamedValueSet [optional]

Dies ist in der Regel nicht definiert. Andernfalls handelt es sich um ein SWbemNamedValueSet-Objekt, dessen Elemente die Kontextinformationen darstellen, die von dem Anbieter verwendet werden können, der die Anforderung verarbeitet. Ein Anbieter, der solche Informationen unterstützt oder benötigt, muss die erkannten Wertnamen, den Datentyp des Werts, die zulässigen Werte und die Semantik dokumentieren.

Rückgabewert

Wenn kein Fehler auftritt, gibt diese Methode ein SWbemObjectSet-Objekt zurück. Hierbei handelt es sich um eine Objektsammlung, die das Resultset der Abfrage enthält. Der Aufrufer kann die Sammlung mithilfe der Implementierung von Sammlungen für die von Ihnen verwendete Programmiersprache untersuchen. Weitere Informationen finden Sie unter Zugreifen auf eine WMI-Sammlung.

Fehlercodes

Nach Abschluss der ExecQuery-Methode enthält das Err-Objekt möglicherweise einen der Fehlercodes aus der folgenden Liste:

wbemErrAccessDenied – 2147749891 (0x80041003)

Der aktuelle Benutzer bzw. die aktuelle Benutzerin verfügt nicht über die erforderlichen Berechtigungen zum Anzeigen des Resultsets.

wbemErrFailed – 2147749889 (0x80041001)

Unbekannter Fehler.

wbemErrInvalidParameter – 2147749896 (0x80041008)

Ein ungültiger Parameter wurde angegeben.

wbemErrInvalidQuery – 2147749911 (0x80041017)

Die Abfragesyntax ist ungültig.

wbemErrInvalidQueryType – 2147749912 (0x80041018)

Die angeforderte Abfragesprache wird nicht unterstützt.

wbemErrOutOfMemory – 2147749894 (0x80041006)

Es ist nicht genügend Arbeitsspeicher zum Abschließen des Vorgangs vorhanden.

Bemerkungen

ExecQuery ist einer der am häufigsten verwendeten Aufrufe zum Abrufen von WMI-Informationen. Ein Standardaufruf von ExecQuery sieht wie folgt aus:

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

Beachten Sie, dass Sie das SWbemServices-Objekt mit einem Moniker erstellen, der den passenden Namespace und die entsprechende Sicherheit darstellt, und dann den ExecQuery-Aufruf über den Dienst durchführen. Eine detaillierte Erläuterung finden Sie unter Erstellen eines WMI-Skripts sowie unter WMI-Enumeration.

Die ExecQuery-Methode gibt genau wie die InstancesOf-Methode immer eine SWbemObjectSet-Sammlung zurück. Daher muss Ihr WMI-Skript die von ExecQuery zurückgegebene Sammlung aufzählen, um auf jede Instanz einer verwalteten Ressource in der Sammlung zugreifen zu können, wie hier gezeigt:

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

Andere SWbemServices-Methoden, die SWbemObjectSet zurückgeben, sind AssociatorsOf, ReferencesTo und SubclassesOf.

Die Rückgabe eines leeren Resultsets durch die Abfrage ist kein Fehler. Die ExecQuery-Methode gibt Schlüsseleigenschaften zurück, auch wenn die Schlüsseleigenschaft im strQuery-Argument nicht angefordert wurde. Wenn beim Ausführen dieser Methode ein Fehler auftritt und Sie das Flag wbemFlagReturnImmediately nicht verwenden, wird das Err-Objekt erst festgelegt, wenn Sie versuchen, auf den zurückgegebenen Objektsatz zuzugreifen. Bei Verwendung des Flags wbemFlagReturnWhenComplete wird das Err-Objekt dagegen festgelegt, wenn die ExecQuery-Methode aufgerufen wird.

Es gibt Grenzwerte für die Anzahl von AND- und OR-Schlüsselwörtern, die in WQL-Abfragen verwendet werden können. Wenn in einer komplexen Abfrage eine große Anzahl von WQL-Schlüsselwörtern verwendet wird, gibt WMI möglicherweise den Fehlercode WBEM_E_QUOTA_VIOLATION als HRESULT-Wert zurück. Der Grenzwert für WQL-Schlüsselwörter hängt davon ab, wie komplex die Abfrage ist.

Beispiele

Das folgende VBScript-Codebeispiel sucht alle Datenträger auf dem lokalen Computer und zeigt die Geräte-ID und die Art des Datenträgerlaufwerks an:

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows Vista
Unterstützte Mindestversion (Server)
Windows Server 2008
Header
Wbemdisp.h
Typbibliothek
Wbemdisp.tlb
DLL
Wbemdisp.dll
CLSID
CLSID_SWbemServices
IID
IID_ISWbemServices

Weitere Informationen

SWbemServices

SWbemServices.Get

Abfragen mit WQL

Erstellen eines WMI-Skripts

WMI-Enumeration