Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zapytanie synchroniczne to zapytanie, które utrzymuje kontrolę nad procesem aplikacji na czas trwania zapytania. Zapytanie synchroniczne wymaga pojedynczego wywołania interfejsu i dlatego jest prostsze niż wywołanie asynchroniczne. Jednak zapytanie synchroniczne może zablokować aplikację w przypadku dużych zapytań lub zapytań za pośrednictwem sieci.
Poniższa procedura opisuje sposób wystawiania synchronicznego zapytania danych przy użyciu programu PowerShell.
Aby wydać synchroniczne zapytanie o dane w programie PowerShell
Opisz zapytanie w usłudze WMI przy użyciu polecenia cmdlet get-WmiObject get-WmiObject i parametru -query. Polecenie cmdlet zwraca pojedynczy obiekt lub kolekcję obiektów w zależności od tego, ile obiektów pasuje do zapytania.
Get-WmiObject -query "SELECT * FROM Win32_logicalDisk WHERE DeviceID = 'C:'"
Poniższa procedura opisuje sposób wystawiania synchronicznego zapytania danych przy użyciu języka C#.
Aby wysłać synchroniczne zapytanie danych w języku C# (Microsoft.Management.Infrastructure)
Opisz zapytanie w usłudze WMI przy użyciu klasy CimSession.QueryInstances. Ta metoda zwraca kolekcję obiektów 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);Użyj standardowych technik kolekcji w języku C#, aby uzyskać dostęp do każdego zwróconego obiektu.
foreach (CimInstance drive in queryInstances) { Console.WriteLine(drive.CimInstanceProperties["DeviceID"]); }
Poniższa procedura opisuje sposób wystawiania synchronicznego zapytania danych przy użyciu języka C#.
Aby wysłać synchroniczne zapytanie danych w języku C# (System.Management)
Utwórz zapytanie za pomocą obiektu ManagementObjectSearcher i pobierz informacje za pomocą wywołania ManagementObjectSearcher.Get.
Ta metoda zwraca obiekt ManagementObjectCollection.
using System.Management; ... ManagementObjectSearcher mgmtObjSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk"); ManagementObjectCollection objCol = mgmtObjSearcher.Get();Użyj standardowych technik obsługi kolekcji w języku C#, aby uzyskać dostęp do każdego zwróconego obiektu.
foreach (ManagementObject drive in objCol) { Console.WriteLine(drive["DeviceID"]); }
Poniższa procedura opisuje sposób wystawiania synchronicznego zapytania danych przy użyciu języka VBScript.
Aby wykonać synchroniczne zapytanie o dane w VBScript
Opisz zapytanie w usłudze WMI przy użyciu SWbemServices.ExecQuery. Ta metoda zwraca SWbemObjectSet.
GetObject("winmgmts:").ExecQuery _ ("Select * from Win32_Service where State='Stopped'")Użyj standardowego języka skryptów kolekcji technik uzyskiwania dostępu do każdego zwróconego obiektu.
for each Service in _ GetObject("winmgmts:").ExecQuery _ ("Select * from Win32_Service where State='Stopped'") WScript.Echo " "& Service.DisplayName & " [", Service.Name, "]" next
Poniższa procedura opisuje sposób wystawiania synchronicznego zapytania danych przy użyciu języka C++.
Aby wydać zapytanie synchroniczne w języku C++
Opisz zapytanie w usłudze WMI za pomocą wywołania metody IWbemServices::ExecQuery.
Metoda ExecQuery przyjmuje ciąg wyszukiwania WQL jako parametr opisujący zapytanie. Usługa WMI wykonuje zapytanie i zwraca wskaźnik interfejsu IEnumWbemClassObject. Za pomocą interfejsu IEnumWbemClassObject można uzyskać dostęp do klas lub wystąpień tworzących zestaw wyników.
Po otrzymaniu zapytania możesz wyliczyć zapytanie za pomocą wywołania metody IEnumWbemClassObject::Next. Aby uzyskać więcej informacji, zobacz Wyliczanie WMI.
Poniższy przykład kodu wymaga następujących odwołań i instrukcji #include w celu poprawnego skompilowania.
#include <wbemidl.h> #include <iostream> using namespace std;W poniższym przykładzie kodu opisano sposób wykonywania zapytań dotyczących obiektów reprezentujących użytkowników i grupy w usłudze 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(); }