Freigeben über


Abrufen von Verwaltungsobjektauflistungen

Das folgende Codebeispiel verwendet die System.Management-Auflistungsklassen, um die Umgebungsvariablen auf einem Computer aufzulisten. In diesem Beispiel können für einige Parameter die Standardwerte übernommen werden, da das Beispiel die Informationen aus dem lokalen Computer erhält. Das Beispiel gibt eine Auflistung aller Objekte für die angegebene Klasse (Win32_Environment) zurück. Nach dem Abrufen listet der Code die Auflistung mit Hilfe der foreach-Anweisung auf und zeigt den Namen und den Wert jeder Variablen in der Auflistung an. Entwickler, die mit der Skripterstellungs-API von WMI vertraut sind, werden einige Ähnlichkeiten feststellen. Es werden zwei verschiedene Variationen demonstriert: Die erste verwendet die ManagementObjectSearcher-Klasse, die mit der einfachsten Form einer Abfrage verwendet wird, welche im Wesentlichen eine vollständige Enumeration darstellt. Die zweite erhält das Klassenobjekt für Win32_Environment und verwendet die GetInstances()-Methode zum Auflisten der Instanzen.

using System;
using System.Management;

// This example demonstrates how to perform a synchronous instance enumeration.

public class EnumerateInstances {
    public static int Main(string[] args) {
      // Build a query for enumeration of Win32_Environment instances
      SelectQuery query = new SelectQuery("Win32_Environment");

      // Instantiate an object searcher with this query
      ManagementObjectSearcher searcher = new ManagementObjectSearcher(query); 

      // Call Get() to retrieve the collection of objects and loop through it
      foreach (ManagementBaseObject envVar in searcher.Get())
         Console.WriteLine("Variable : {0}, Value = {1}", 
            envVar["Name"],envVar["VariableValue"]);
      return 0;
    }
}

[Visual Basic]
Imports System
Imports System.Management
' This example demonstrates how to perform a synchronous instance enumeration.

Public Class EnumerateInstances  
   Overloads Public Shared Function Main(args() As String) As Integer
      ' Build a query for enumeration of Win32_Environment instances
      Dim query As New SelectQuery("Win32_Environment")

      ' Instantiate an object searcher with this query
      Dim searcher As New ManagementObjectSearcher(query)

      ' Call Get() to retrieve the collection of objects and loop through it
      Dim envVar As ManagementBaseObject
      For Each envVar In  searcher.Get()
         Console.WriteLine("Variable : {0}, Value = {1}", _
            envVar("Name"), envVar("VariableValue"))
      Next envVar
      Return 0
   End Function 
End Class

Der Zugriff auf Verwaltungsinformationen erfolgt meist in verteilten Umgebungen und kann unter Umständen große Datenmengen miteinbeziehen. Um dies zu unterstützen, können Verwaltungsoperationen auch asynchron durchgeführt werden. Im folgenden Beispiel wird gezeigt, wie alle Dienste auf einem Computer in einem asynchronen Codierungsmuster aufgelistet werden. Die zum asynchronen Aufrufen einer Operation verwendete Methode entspricht einer Überladung der synchronen Methode, die einen zusätzlichen Parameter des Typs ManagementOperationObserver verwendet, um Rückrufe für Ergebnisse zu behandeln. Dieses Objekt definiert Ereignisse für die Benachrichtigung von Ergebnissen und Vervollständigungen, für die Handler abonniert werden, die ausgeführt werden, sobald eines dieser Ereignisse eintritt.

using System;
using System.Management;

// This example demonstrates how to perform an asynchronous instance enumeration.

public class EnumerateInstancesAsync {
    public static int Main(string[] args) {
      //Enumerate asynchronously using Object Searcher
      //===============================================

      //Instantiate an object searcher with the query
      ManagementObjectSearcher searcher = 
         new ManagementObjectSearcher(new SelectQuery("Win32_Service")); 

      // Create a results watcher object, and handler for results and completion
      ManagementOperationObserver results = new ManagementOperationObserver();
      ObjectHandler objectHandler = new ObjectHandler();

      // Attach handler to events for results and completion
      results.ObjectReady += new ObjectReadyEventHandler(objectHandler.NewObject);
      results.Completed += new CompletedEventHandler(objectHandler.Done);

      //Call the asynchronous overload of Get() to start the enumeration
      searcher.Get(results);
         
      //Do something else while results arrive asynchronously
      while (!objectHandler.IsCompleted) {
         System.Threading.Thread.Sleep (1000);
      }

      objectHandler.Reset();
      return 0;
   }


   //Handler for asynchronous results
   public class ObjectHandler {
      private bool isCompleted = false;

      public void NewObject(object sender, ObjectReadyEventArgs obj) {
         Console.WriteLine("Service : {0}, State = {1}", 
            obj.NewObject["Name"], obj.NewObject["State"]);
      }

      public bool IsCompleted {
         get { 
            return isCompleted;
         }
      }
      
      public void Reset()   {
         isCompleted = false;
      }

      public void Done(object sender, CompletedEventArgs obj) {
         isCompleted = true;
      }
   }
}

Siehe auch

Zugreifen auf Verwaltungsdaten mit Hilfe von System.Management | Abfragen von Verwaltungsdaten | Abonnieren und Verwenden von Verwaltungsereignissen | Ausführen von Methoden für Verwaltungsobjekte | Remote- und Verbindungsoptionen | Verwenden von Objekten mit starkem Typ