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-Auflistung verfügbar.

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

Eine Erläuterung dieser Syntax finden Sie unter Dokumentkonventionen für die Skripterstellungs-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 und in der WQL-Referenz.

strQueryLanguage [ Optional]

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

iFlags [ Optional]

Eine ganze Zahl, die das Verhalten der Abfrage bestimmt und bestimmt, ob dieser Aufruf sofort zurückgegeben wird. Der Standardwert für diesen Parameter ist wbemFlagReturnImmediately. Dieser Parameter kann die folgenden Werte akzeptieren.

wbemFlagForwardOnly** (32 (0x20))

Bewirkt, dass ein vorwärts enumerator zurückgegeben wird. Vorwärts-Enumeratoren sind im Allgemeinen viel schneller und verwenden weniger Arbeitsspeicher als herkömmliche Enumeratoren, aber sie lassen keine Aufrufe von SWbemObject.Clone zu. _

wbemFlagBidirectional( (0 (0x0))

Bewirkt, dass WMI Zeiger auf Objekte der Enumeration beibehalten, bis der Client den Enumerator frei gibt.

wbemFlagReturnImmediately( (16 (0x10))

Bewirkt, dass der Aufruf sofort zurückkehrt.

wbemFlagReturnWhenComplete** (0 (0x0))

Bewirkt, dass dieser Aufruf 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ück gibt. Weitere Informationen finden Sie unter Lokalisieren von WMI-Klasseninformationen.

objWbemNamedValueSet [ Optional]

In der Regel ist dies nicht definiert. Andernfalls ist dies ein SWbemNamedValueSet-Objekt, dessen Elemente die Kontextinformationen darstellen, die vom Anbieter verwendet werden können, der die Anforderung bedient. Ein Anbieter, der solche Informationen unterstützt oder erfordert, 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. Dies ist eine Objektsammlung, die das Ergebnisset der Abfrage enthält. Der Aufrufer kann die Auflistung mithilfe der Implementierung von Auflistungen für die von Ihnen verwendete Programmiersprache untersuchen. Weitere Informationen finden Sie unter Zugreifen auf eine Auflistung.

Fehlercodes

Nach Abschluss der ExecQuery-Methode kann das Err-Objekt einen der Fehlercodes in der folgenden Liste enthalten.

wbemErrAccessDenied – 2147749891 (0x80041003)

Der aktuelle Benutzer verfügt nicht über die Berechtigung zum Anzeigen des Ergebnisses.

wbemErrFailed – 2147749889 (0x80041001)

Unbekannter Fehler.

wbemErrInvalidParameter – 2147749896 (0x80041008)

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)

Nicht genügend Arbeitsspeicher zum Abschließen des Vorgangs.

Hinweise

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 entsprechenden Namespace und die Sicherheit darstellt, und dann den ExecQuery-Aufruf über den Dienst ausführen. Eine vollständigere Erörterung finden Sie unter Erstellen eines WMI-Skripts und Aufzählen von WMI.

Wie die InstancesOf-Methode gibt die ExecQuery-Methode immer eine SWbemObjectSet-Auflistung zurück. Daher muss Ihr WMI-Skript die Von ExecQuery zurückgegebenen Sammlungen aufzählen, um auf jede verwaltete Ressourceninstanz 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 ein SWbemObjectSet zurückgeben, sind AssociatorsOf, ReferencesTound SubclassesOf.

Es ist kein Fehler für die Abfrage, ein leeres Ergebnisset zurück zu geben. Die ExecQuery-Methode gibt Schlüsseleigenschaften zurück, unabhängig davon, ob die Schlüsseleigenschaft im strQuery-Argument angefordert wird. 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 zu zugreifen. Wenn Sie jedoch das Flag wbemFlagReturnWhenComplete verwenden, wird das Err-Objekt festgelegt, wenn die ExecQuery-Methode aufgerufen wird.

Die Anzahl der SCHLÜSSELWÖRTER AND und OR, die in WQL-Abfragen verwendet werden können, ist begrenzt. Eine große Anzahl von WQL-Schlüsselwörtern, die in einer komplexen Abfrage verwendet werden, kann dazu führen, dass WMI den WBEM _ E _ QUOTA _ VIOLATION-Fehlercode als HRESULT-Wert zurückgibt. Der Grenzwert für WQL-Schlüsselwörter hängt davon ab, wie komplex die Abfrage ist.

Beispiele

Im folgenden VBScript-Codebeispiel werden alle Laufwerke auf dem lokalen Computer gefunden und die Geräte-ID und der Typ des Laufwerks angezeigt.

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

Siehe auch

Swbemservices

SWbemServices.Get

Abfragen mit WQL

Erstellen eines WMI-Skripts

Aufzählen von WMI