Bagikan melalui


Memanggil Permintaan Sinkron

Kueri sinkron adalah kueri yang mempertahankan kontrol atas proses aplikasi Anda selama durasi kueri. Kueri sinkron memerlukan satu panggilan antarmuka, dan oleh karena itu lebih sederhana daripada panggilan asinkron. Namun, kueri sinkron dapat berpotensi menggantung aplikasi Anda untuk kueri besar atau kueri yang dilakukan melalui jaringan.

Prosedur berikut menjelaskan cara mengeluarkan kueri data sinkron menggunakan PowerShell.

Untuk melakukan kueri data sinkronisasi di PowerShell

  • Jelaskan kueri Anda ke WMI dengan menggunakan cmdlet Get-WmiObject WMI dan parameter -query . Cmdlet mengembalikan satu objek, atau kumpulan objek, tergantung pada berapa banyak objek yang sesuai dengan kueri.

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

Prosedur berikut menjelaskan cara mengeluarkan kueri data sinkron menggunakan C#.

Untuk mengeluarkan kueri data sinkron di C# (Microsoft.Management.Infrastructure)

  1. Jelaskan kueri Anda ke WMI menggunakan CimSession.QueryInstances. Metode ini mengembalikan kumpulan objek CimInstance.

    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. Gunakan teknik pengumpulan bahasa C# standar untuk mengakses setiap objek yang dikembalikan.

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

Prosedur berikut menjelaskan cara mengeluarkan kueri data sinkron menggunakan C#.

Untuk melakukan kueri data sinkron di C# (System.Management)

  1. Buat kueri dengan objek ManagementObjectSearcher, dan ambil informasi dengan panggilan ke ManagementObjectSearcher.Get.

    Metode ini mengembalikan objek ManagementObjectCollection.

    using System.Management;
    ...
    ManagementObjectSearcher mgmtObjSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk");
    ManagementObjectCollection objCol = mgmtObjSearcher.Get();
    
  2. Gunakan teknik pengumpulan bahasa C# standar untuk mengakses setiap objek yang dikembalikan.

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

Prosedur berikut menjelaskan cara mengeluarkan kueri data sinkron menggunakan VBScript.

Untuk mengeluarkan kueri data sinkron di VBScript

  1. Jelaskan kueri Anda ke WMI menggunakan SWbemServices.ExecQuery. Metode ini mengembalikan SWbemObjectSet.

    GetObject("winmgmts:").ExecQuery _
            ("Select * from Win32_Service where State='Stopped'")
    
  2. Gunakan bahasa pemrograman skrip standar teknik pengumpulan untuk mengakses setiap objek yang dikembalikan.

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

Prosedur berikut menjelaskan cara mengeluarkan kueri data sinkron menggunakan C++.

Untuk mengeluarkan kueri sinkron di C++

  1. Jelaskan kueri Anda ke WMI melalui panggilan ke IWbemServices::ExecQuery.

    Metode ExecQuery mengambil string pencarian WQL sebagai parameter yang menjelaskan kueri Anda. WMI melakukan kueri dan mengembalikan penunjuk antarmuka IEnumWbemClassObject. Melalui antarmuka IEnumWbemClassObject, Anda dapat mengakses kelas atau instans yang membentuk tataan hasil.

  2. Setelah Anda menerima kueri Anda, Anda dapat menghitung kueri tersebut dengan panggilan ke IEnumWbemClassObject::Next. Untuk informasi selengkapnya, lihat Menghitung WMI.

    Contoh kode berikut memerlukan referensi berikut dan pernyataan #include untuk dikompilasi dengan benar.

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

    Contoh kode berikut menjelaskan cara mengkueri objek yang mewakili pengguna dan grup di WMI.

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