Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

Ähnliche Präsentationen


Präsentation zum Thema: "WMI .NET Framework-Klassen in eigenen Anwendungen nutzen"—  Präsentation transkript:

1 WMI .NET Framework-Klassen in eigenen Anwendungen nutzen
MSDN TechTalk – Dezember 2001 WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 1 WMI .NET Framework-Klassen in eigenen Anwendungen nutzen Dirk Primbs PSS Developer Support Microsoft GmbH

2 WMI .NET in eigenen Applikationen:
Agenda WMI Grundlagen WMI .NET in eigenen Applikationen:  Überblick über das System.Management  laufende Prozesse ermitteln  Boot-Delay per WMI .NET setzen  Asynchrone Bearbeitung & WMI-Eventbehandlung Fragen WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

3 WMI .NET in eigenen Applikationen:
Agenda Agenda WMI Grundlagen WMI .NET in eigenen Applikationen:  Überblick über das System.Management  laufende Prozesse ermitteln  Boot-Delay per WMI .NET setzen  Asynchrone Bearbeitung & WMI-Eventbehandlung Fragen WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

4 Wofür WMI? Routing-Tabelle? Welche Grafikkarte? Prozeß remote beenden?
Läuft das Programm XY noch? Installierte Netzwerkshares? Laufende Services? Performance Counter? System neu booten bei hoher Speicherauslastung? Installierte Software? Rechner zuschalten bei hoher Prozessorlast! DHCP aktivieren! WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

5 Was ist WMI? Implementierung des Web Based Enterprise Managements (WBEM) Standardisierung durch die DMTF (Desktop Management Task Force) Common Information Model (CIM) als Kern von WMI Beschreibung sowohl physischer (z. B. Festplatte) als auch logischer Objekte (Dateien, Prozesse) innerhalb eines Objektmodells CIM als Vereinigung von Standards wie ISO Management Framework, X.700 und SNMP Zugriffsmöglichkeiten auf Active Directory, Windows Installer, Performance Counters WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

6 Ermitteln verschiedenster Systemparameter
Möglichkeiten von WMI Ermitteln verschiedenster Systemparameter Sammeln von Informationen über mehrere Systeme hinweg Setzen von Parametern / Konfigurieren von Geräten/Programmen Auslösen von Events zu bestimmten Systemereignissen Abfrage von Informationen in WQL WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

7 CIM – Management Schema
WMI Architektur MSDN TechTalk – Dezember 2001 WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 7 WBEM Consumer WMI managed- code APIs Managed Code Client ODBC Adapter Client SWBEM… Script COM API COM CIM – Management Schema WMI Services Pub/Sub Service Correlation Event Filtering Query CIM Repository DCOM WMI Providers (werden bei Bedarf geladen) DCOM SNMP Active Directory WMI ext for WDM NT Event Log Perf Counters Registry WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

8 Provider bieten Zugriff auf Objekte an
WMI Architektur Provider bieten Zugriff auf Objekte an Consumer greifen auf Informationen zu Managed Objects (MOs) repräsentieren (Hardware- oder Software-) Ressourcen Organisiert in verschiedene „Namespaces“ Klassen als „Beschreibung“ von Ressourcen Instanzen von Klassen als „Verkörperung“ der tatsächlich vorhandenen Objekte WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

9 Ablauf einer WMI-Anfrage
\\myserver\root\cimv2:win32_logicaldisk.name=„c:“ Anforderung Lokaler WMI-Service Erfüllt lokale Anfragen Leitet Remote-Anfragen weiter WMI-Objekt DCOM Remote WMI-Service Ermittelt Werte mit Hilfe des Repository und den WMI-Providern Repository Provider WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

10 WMI Architektur - MOF Klassen werden als MOF-Dateien (Managed Object Format) in kompilierter Form (mofcomp.exe) im Repository abgelegt class Win32_Environment : CIM_SystemResource { string Caption; string Description; datetime InstallDate; string Name; string Status; boolean SystemVariable; string UserName; string VariableValue; }; WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

11 Klassen sind in Namespaces gruppiert
WMI-Pfade Klassen sind in Namespaces gruppiert Ein vollständiger Pfad gibt Zielserver, Namespace und ggf. Name der gewünschten Instanz an: ManagementPath path = new ManagementPath( @”\\MyServer\root\cimv2:” “Win32_logicaldisk=‘c:‘”); Standardpfad: \\localhost\root\cimv2 WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

12 Abfragesprache für Instanzen und Klassen innerhalb von WMI
WQL Abfragesprache für Instanzen und Klassen innerhalb von WMI Subset von SQL Beispiele: Alle Shares eines Systems: SELECT * FROM win32_share Ein spezieller Share: SELECT * FROM win32_share WHERE name=‚public‘ WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

13 Demo WMI mit dem CIM-Studio erkunden
WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

14 WMI .NET API Architektur
.NET Application .NET WMI Interfaces .NET WMI API COM Interfaces CIM Repository WinMgmt Service ( CIMOM ) .NET WMI Instrumentation Interfaces Provider (DLL, EXE) .Net Instrumentation WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

15 WMI .NET in eigenen Applikationen:
Agenda Agenda WMI Grundlagen WMI .NET in eigenen Applikationen:  Überblick über das System.Management  laufende Prozesse ermitteln  Boot-Delay per WMI .NET setzen  Asynchrone Bearbeitung & WMI-Eventbehandlung Fragen WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

16 WMI .NET in eigenen Applikationen:
Agenda Agenda WMI Grundlagen WMI .NET in eigenen Applikationen:  Überblick über das System.Management  laufende Prozesse ermitteln  Boot-Delay per WMI .NET setzen  Asynchrone Bearbeitung & WMI-Eventbehandlung Fragen WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

17 ManagementEventObject ManagementObject / Management Class
System.Management Management ObjectSearcher EventWatcher OperationWatcher ManagementQuery Management ObjectCollection ManagementEventObject ObjectQuery EventQuery DataQuery SchemaQuery ManagementObject / Management Class Key ManagementOptions Security Main Class Property Set QualifierSet MethodSet Main Collection ManagementException Method Property Qualifier Collection ManagementPath ManagementScope Can be obtained from WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

18 Die wichtigsten Objekte
ManagementClass „Blueprint“ eines WMI-Objekts ManagementObject Instanz einer WMI-Klasse ManagementObjectSearcher Ermittelt Collections von WMI-Objekten WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

19 ManagementClass Repräsentiert eine WMI-Schemaklasse Scope Methods
Namespace des Objekts Methods Liefert Collection der an dem WMI-Objekt aufrufbaren Methoden Properties Liefert Collection der an dem WMI-Objekt vorhandenen Eigenschaften CreateInstance() Erzeugt eine zu der Klasse passende Objektinstanz GetInstances() Ermitteln aller im System vorhandenen Objektinstanzen der Klasse WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

20 ManagementClass – Beispiel 1
Ermitteln der für Win32_LogicalDisk verwendbaren Eigenschaften: ManagementClass diskClass = new ManagementClass("Win32_LogicalDisk"); diskClass.Get(); foreach (MethodData m in diskClass.Methods) Console.WriteLine(m.Name); WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

21 ManagementClass – Beispiel 2
Boot-Delay per WMI .NET setzen ManagementClass c = new ManagementClass( "win32_computersystem"); ManagementObjectCollection col = c.GetInstances(); foreach (ManagementObject o in col) o[„SystemStartUpDelay“] = 3; WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

22 Demo Processviewer mit WMI .NET
WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

23 Repräsentiert WMI-Objekte
ManagementObject Repräsentiert WMI-Objekte Direkt instanziierbar: ManagementObject o = new ManagementObject(); o.Path = “Win32_Process=‘notepad.exe’”; oder ManagementObject o = new ManagementObject(“Win32_Process=‘notepad.exe’”); WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

24 ClassPath Indexer [] GetText() CompareTo() ManagementObject - II
Vollständiger Pfad zu der Klasse Indexer [] ermöglicht Zugriff auf Eigenschaften über deren Name Alternativ: GetPropertyValue(), GetQualifierValue() GetText() Liefert Quelltext des Objektes als MOF CompareTo() vergleicht mit anderen Objekten WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

25 ManagementObject - III
Scope Namespace des Objektes Path Pfad zum Objekt Get() bindet das .Net-Objekt an ein tatsächliches WMI-Objekt. GetRelated() “in Beziehung stehende” Objekte ermitteln (Anwendung bei Associations) GetRelationships() Vorhandene Associations ermitteln WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

26 GetMethodParameters()
ManagementObject - IV Put() Speichert gemachte Änderungen oder erzeugt neues WMI-Objekt CopyTo() Kopiert das aktuelle Objekt in einen anderen Namespace Delete() Löscht das repräsentierte WMI-Objekt InvokeMethod() Ausführung einer Methode des aktuellen WMI-Objektes GetMethodParameters() Argumentenliste einer Methode ermitteln WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

27 WMI-Objekt eines Service ermitteln und seine Eigenschaften anzeigen:
Beispiel 1 WMI-Objekt eines Service ermitteln und seine Eigenschaften anzeigen: ManagementObject myService = new ManagementObject(“Win32_Service= ‘Alerter’”); foreach (PropertyData p in myService.Properties) Console.WriteLine("{0}:\t{1}",p.Name, p.Value); WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

28 Abhängige Services ermitteln und gemeinsam starten:
Beispiel 2 Abhängige Services ermitteln und gemeinsam starten: ManagementObjectCollection relatedServices = myService.GetRelated(“Win32_Service”); foreach (ManagementObject service in relatedServices) service.InvokeMethod(“StartService”); WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

29 ManagementObjectSearcher
Wird verwendet, um Collections von Objekten zu erhalten Einsatz bei Enumerierung und Queries ManagementObjectSearcher s = new ManagementObjectSearcher(); s.Query = new WqlObjectQuery( "SELECT * FROM win32_process"); ManagementObjectCollection processes = s.Get(); foreach (ManagementObject process in processes) { Console.WriteLine(process["Name"]); } WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

30 ManagementObjectSearcher - II
Scope Namespace auf den sich die Query / Enumeration bezieht Query WQL-Abfrage zum Anfordern der WMI-Objekte Options Optionen für den Einsatz der Abfrage Get() Ausführen der Abfrage WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

31 Demo Der Remote-Processviewer
WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

32 Typisierte WMI-Klassen
WMI-Klassen mit strong typed Eigenschaften und Methoden Erstellung mittels Kommandozeilentool mgmtclassgen.exe mgmtclassgen win32_operatingsystem WMI Server Explorer Extension (Beta 2) WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

33 Typisierte Klassen – Beispiel
Labels aller im System vorhandenen Laufwerke ausgeben using MyApp.ROOT.CIMV2; … foreach (LogicalDisk l in LogicalDisk.GetInstances()) Console.WriteLine(„{0}:\t{1}“, l.Name, l.VolumeName); WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

34 Demo Typisierte WMI-Objekte
WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

35 WMI .NET in eigenen Applikationen:
Agenda Agenda WMI Grundlagen WMI .NET in eigenen Applikationen:  Überblick über das System.Management  laufende Prozesse ermitteln  Boot-Delay per WMI .NET setzen  Asynchrone Bearbeitung & WMI-Eventbehandlung Fragen WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

36 WMI .NET in eigenen Applikationen:
Agenda Agenda WMI Grundlagen WMI .NET in eigenen Applikationen:  Überblick über das System.Management  laufende Prozesse ermitteln  Boot-Delay per WMI .NET setzen  Asynchrone Bearbeitung & WMI-Eventbehandlung Fragen WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

37 Asynchrone Bearbeitung
ManagementOperationsObserver Bindeglied zwischen WMI und Rückrufmethoden Rückruf mittels Delegates: ObjectReady – Ein Objekt (etwa in einer Enumeration) steht zur Bearbeitung bereit Completed – Eine Operation wurde abgeschlossen WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

38 Permanente und temporäre Eventconsumer:
WMI-Events Permanente und temporäre Eventconsumer: Temporärer Consumer: WMI-Applikation, die Events von WMI empfängt Permanenter Consumer: Für ein Event registrierte Komponente; Komponentenstart bei Eintreffen eines passenden Events Event-Bindung via WQL: select * from __instancemodificationevent within 5 where targetinstance isa 'Win32_Processor' and targetinstance.LoadPercentage > 50 WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

39 __InstanceCreationEvent
WMI-Events - Typen __InstanceCreationEvent Löst aus, wenn Instanzen erzeugt werden __InstanceModificationEvent Löst bei Änderung einer Instanz aus __InstanceDeletionEvent Wird durch das Löschen einer Instanz erzeugt WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

40 ManagementEventWatcher
WMI-Events - Objekte ManagementEventWatcher Bindeglied zwischen WMI und Rückrufmethoden Synchrone Eventbearbeitung: WaitForNextEvent() Asynchroner Rückruf mittels Delegate: EventArrived – Ein passendes Event ist eingetreten und kann bearbeitet werden WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

41 Events synchron empfangen
// WQL-Eventabfrage erzeugen WqlEventQuery query = new WqlEventQuery("__InstanceModificationEvent", new TimeSpan(0,0,1), "TargetInstance isa \"Win32_Service\""); // Eventbindung anlegen ManagementEventWatcher watcher = new ManagementEventWatcher(query); // Event abwarten ManagementBaseObject e = watcher.WaitForNextEvent(); ManagementObject e2 = (ManagementBaseObject)e["TargetInstance"]; Console.WriteLine("Service {0}, Status {1}", e2["Name“], e2["State"]); // Eventbindung lösen watcher.Stop(); WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

42 Events asynchron empfangen
// Rückruffunktion bei eintreffenden Events public class EventHandlerClass { public void Arrived(object sender, EventArrivedEventArgs e) { Console.WriteLine(„Event arrived!“); } ... // Delegate einbinden EventHandlerClass c = new EventHandlerClass(); watcher.EventArrived += new EventArrivedHandler(c.Arrived); // Eventempfang starten watcher.Start(); // … Programmcode … // Eventbindung lösen watcher.Stop(); WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

43 Demo Asynchrone Bearbeitung und Eventempfang
WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

44 Was sonst noch? WMI ist in Windows 2000, Windows Me und Windows XP als Service installiert Separat für Windows 95 osr2.5, Windows 98, Windows 98 SE, und Windows NT 4.0 (ab SP4) installierbar Core und SDK Download im Web:  SDK: Core: release.asp?ReleaseId=18490 Frei redistribuierbar WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

45 Und…. WMI-Tutorial Desktop Management Task Force Managing Windows with WMI: Administering Windows and Applications across Your Enterprise: WMI .NET Framework-Klassen in eigenen Anwendungen nutzen

46 Fragen!? MSDN TechTalk – Dezember 2001 WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 46 Uff... WMI .NET Framework-Klassen in eigenen Anwendungen nutzen


Herunterladen ppt "WMI .NET Framework-Klassen in eigenen Anwendungen nutzen"

Ähnliche Präsentationen


Google-Anzeigen