Megosztás a következőn keresztül:


Szinkron lekérdezés meghívása

A szinkron lekérdezés olyan lekérdezés, amely a lekérdezés időtartamára szabályozza az alkalmazás folyamatát. A szinkron lekérdezések egyetlen felületi hívást igényelnek, ezért egyszerűbbek, mint az aszinkron hívások. A szinkron lekérdezések azonban zárolják az alkalmazást nagy méretű lekérdezések vagy lekérdezések esetén a hálózaton keresztül.

Az alábbi eljárás azt ismerteti, hogyan lehet szinkron adat lekérdezést kiadni a PowerShell használatával.

Szinkron adat lekérdezés kiadása a PowerShell-

  • Írja le a WMI-be való lekérdezést a WMI Get-WmiObject parancsmaggal és a -query paraméterrel. A parancsmag egyetlen objektumot vagy objektumgyűjteményt ad vissza attól függően, hogy hány objektum illeszkedik a lekérdezéshez.

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

Az alábbi eljárás azt ismerteti, hogyan adhat ki szinkron adat lekérdezést a C# használatával.

Szinkronizált adat lekérdezés kiadása a C# (Microsoft.Management.Infrastructure)

  1. Írja le a WMI-be történő lekérdezést a CimSession.QueryInstances használatával. Ez a metódus CimInstance-objektumok gyűjteményét adja vissza.

    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. Az egyes visszaadott objektumok eléréséhez használjon szabványos C#-nyelvi gyűjtési technikákat.

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

Az alábbi eljárás azt ismerteti, hogyan adhat ki szinkron adat lekérdezést a C# használatával.

Szinkron adatlekérdezés végrehajtása C# (System.Management)

  1. Hozza létre a lekérdezést egy ManagementObjectSearcher objektummal, és kérje le az adatokat a ManagementObjectSearcher.Gethívásával.

    Ez a metódus egy ManagementObjectCollection objektumot ad vissza.

    using System.Management;
    ...
    ManagementObjectSearcher mgmtObjSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk");
    ManagementObjectCollection objCol = mgmtObjSearcher.Get();
    
  2. Az egyes visszaadott objektumok eléréséhez használjon szabványos C#-nyelvi gyűjtési technikákat.

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

Az alábbi eljárás azt ismerteti, hogyan lehet szinkron adatlekérdezéseket kiadni a VBScript használatával.

Szinkron VBScript adatlekérdezés végrehajtása

  1. Írja le a WMI-be való lekérdezést SWbemServices.ExecQueryhasználatával. Ez a metódus egy SWbemObjectSetad vissza.

    GetObject("winmgmts:").ExecQuery _
            ("Select * from Win32_Service where State='Stopped'")
    
  2. Használjon szabványos szkriptnyelvet gyűjtemény technikákat az egyes visszaadott objektumok eléréséhez.

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

Az alábbi eljárás azt ismerteti, hogyan lehet szinkronizált adat lekérdezést kiadni a C++ használatával.

Szinkron lekérdezés kiadása a C++

  1. Írja le a WMI-be irányuló lekérdezést az IWbemServices::ExecQueryhívásával.

    A ExecQuery metódus egy WQL keresési sztringet használ a lekérdezést leíró paraméterként. A WMI végrehajtja a lekérdezést, és visszaad egy IEnumWbemClassObject felületmutatót. Az IEnumWbemClassObject felületen elérheti az eredményhalmazt alkotó osztályokat vagy példányokat.

  2. Miután megkapta a lekérdezést, a IEnumWbemClassObject::Nexthívásával felsorolhatja azt. További információ: WMI-számbavétele.

    Az alábbi példakód a következő hivatkozásokat és #include utasításokat igényli a helyes fordításhoz.

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

    Az alábbi példakód bemutatja, hogyan kérdezhetők le a WMI felhasználóit és csoportjait képviselő objektumok.

    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();
    }