Aufrufen einer synchronen Abfrage

Eine synchrone Abfrage ist eine Abfrage, die die Kontrolle über den Prozess Ihrer Anwendung für die Dauer der Abfrage behält. Eine synchrone Abfrage erfordert einen einzelnen Schnittstellenaufruf und ist daher einfacher als ein asynchroner Aufruf. Eine synchrone Abfrage hat jedoch das Potenzial, Ihre Anwendung für große Abfragen oder Abfragen über ein Netzwerk zu sperren.

Im folgenden Verfahren wird beschrieben, wie Sie eine synchrone Datenabfrage mithilfe von PowerShell ausführen.

So stellen Sie eine synchrone Datenabfrage in PowerShell aus

  • Beschreiben Sie Ihre WMI-Abfrage mithilfe des WMI-Cmdlets Get-WmiObject und des Parameters -query. Das Cmdlet gibt entweder ein einzelnes Objekt oder eine Auflistung von -Objekten zurück, je nachdem, wie viele Objekte zur Abfrage passen.

    Get-WmiObject -query "SELECT * FROM Win32_logicalDisk WHERE DeviceID = 'C:'"
    

Im folgenden Verfahren wird beschrieben, wie Eine synchrone Datenabfrage mit C# ausgegeben wird.

So führen Sie eine synchrone Datenabfrage in C# aus (Microsoft.Management.Infrastructure)

  1. Beschreiben Sie Ihre WMI-Abfrage mithilfe von CimSession.QueryInstances. Diese Methode gibt eine Auflistung von CimInstance-Objekten zurück.

    using Microsoft.Management.Infrastructure;
    ...
    string Namespace = @"root\cimv2";
    string diskDriveQuery = "SELECT * FROM Win32_LogicalDisk";
    CimSession mySession = CimSession.Create("localhost");
    IEnumerable<CimInstance> queryInstances = mySession.QueryInstances(Namespace, "WQL", diskDriveQuery);
    
  2. Verwenden Sie standardmäßige C#-Sprachsammlungsverfahren, um auf jedes zurückgegebene Objekt zuzugreifen.

    foreach (CimInstance drive in queryInstances)
    {
       Console.WriteLine(drive.CimInstanceProperties["DeviceID"]);
    }
    

Im folgenden Verfahren wird beschrieben, wie Eine synchrone Datenabfrage mit C# ausgegeben wird.

So führen Sie eine synchrone Datenabfrage in C# aus (System.Management)

  1. Erstellen Sie die Abfrage mit einem ManagementObjectSearcher-Objekt, und rufen Sie die Informationen mit einem Aufruf von ManagementObjectSearcher.Getab.

    Diese Methode gibt ein ManagementObjectCollection-Objekt zurück.

    using System.Management;
    ...
    ManagementObjectSearcher mgmtObjSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk");
    ManagementObjectCollection objCol = mgmtObjSearcher.Get();
    
  2. Verwenden Sie standardmäßige C#-Sprachsammlungsverfahren, um auf jedes zurückgegebene Objekt zuzugreifen.

    foreach (ManagementObject drive in objCol)
    {
       Console.WriteLine(drive["DeviceID"]);
    }
    

Im folgenden Verfahren wird beschrieben, wie Sie eine synchrone Datenabfrage mit VBScript ausführen.

So stellen Sie eine synchrone Datenabfrage in VBScript aus

  1. Beschreiben Sie Ihre WMI-Abfrage mithilfe von SWbemServices.ExecQuery. Diese Methode gibt ein SWbemObjectSetzurück.

    GetObject("winmgmts:").ExecQuery _
            ("Select * from Win32_Service where State='Stopped'")
    
  2. Verwenden Sie standardmäßige Techniken zur Skriptsprachsammlung, um auf jedes zurückgegebene Objekt zuzugreifen.

    for each Service in _ 
        GetObject("winmgmts:").ExecQuery _
            ("Select * from Win32_Service where State='Stopped'")
        WScript.Echo "  "& Service.DisplayName & " [", Service.Name, "]"
    next
    

Im folgenden Verfahren wird beschrieben, wie Eine synchrone Datenabfrage mit C++ ausgegeben wird.

So stellen Sie eine synchrone Abfrage in C++ aus

  1. Beschreiben Sie Ihre WMI-Abfrage durch einen Aufruf von IWbemServices::ExecQuery.

    Die ExecQuery-Methode verwendet eine WQL-Suchzeichenfolge als Parameter, der Ihre Abfrage beschreibt. WMI führt die Abfrage aus und gibt einen IEnumWbemClassObject-Schnittstellenzeiger zurück. Über die IEnumWbemClassObject-Schnittstelle können Sie auf die Klassen oder Instanzen zugreifen, die das Resultset bilden.

  2. Nachdem Sie die Abfrage erhalten haben, können Sie die Abfrage mit einem Aufruf von IEnumWbemClassObject::Nextauflisten. Weitere Informationen finden Sie unter Aufzählen von WMI.

    Das folgende Codebeispiel erfordert die folgenden Verweise und # include-Anweisungen, um ordnungsgemäß zu kompilieren.

    #include <wbemidl.h>
    #include <iostream>
    using namespace std;
    

    Im folgenden Codebeispiel wird beschrieben, wie Die Objekte abgefragt werden, die die Benutzer und Gruppen in WMI darstellen.

    void ExecQuerySync(IWbemServices *pSvc)
    {
        // Query for all users and groups.
    
        BSTR Language = SysAllocString(L"WQL");
        BSTR Query = SysAllocString(L"SELECT * FROM __Namespace");
    
        // Initialize the IEnumWbemClassObject pointer.
        IEnumWbemClassObject *pEnum = 0;
    
        // Issue the query.
        HRESULT hRes = pSvc->ExecQuery(
            Language,
            Query,
            WBEM_FLAG_FORWARD_ONLY,         // Flags
            0,                              // Context
            &pEnum
            );
    
        SysFreeString(Query);
        SysFreeString(Language);
    
        if (hRes != 0)
        {
            printf("Error\n");
            return;
        }
    
        ULONG uTotal = 0;
    
        // Retrieve the objects in the result set.
        for (;;)
        {
            IWbemClassObject *pObj = 0;
            ULONG uReturned = 0;
    
            hRes = pEnum->Next(
                0,                  // Time out
                1,                  // One object
                &pObj,
                &uReturned
                );
    
            uTotal += uReturned;
    
            if (uReturned == 0)
                break;
    
            // Use the object.
    
            // ...
    
            // Release it.
            // ===========
    
            pObj->Release();    // Release objects not owned.            
        }
    
        // All done.
        pEnum->Release();
    }