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)
Í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);
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)
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();
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
Í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'")
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++
Í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.
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(); }