WMI .NET Framework-Klassen in eigenen Anwendungen nutzen Dirk Primbs PSS Developer Support Microsoft GmbH Email: [email protected].
Download ReportTranscript WMI .NET Framework-Klassen in eigenen Anwendungen nutzen Dirk Primbs PSS Developer Support Microsoft GmbH Email: [email protected].
WMI .NET Framework-Klassen in eigenen Anwendungen nutzen Dirk Primbs PSS Developer Support Microsoft GmbH Email: [email protected] 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 2 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 Wofür WMI? Routing-Tabelle? Welche Grafikkarte? Prozeß remote beenden? Installierte Netzwerkshares? Läuft das Programm XY noch? 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 4 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 5 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 6 WMI Architektur Managed Code Client WBEM Consumer WMI managedcode APIs SWBEM… Script ODBC Adapter ODBC Client COM API COM Client DCOM CIM – Management Schema Query Service Pub/Sub Service Correlation Service WMI Services Event Filtering DCOM CIM Repository WMI Providers (werden bei Bedarf geladen) Registry Perf Counters NT Event Log WMI .NET Framework-Klassen in eigenen Anwendungen nutzen WMI ext for WDM SNMP Active Directory 7 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 8 Ablauf einer WMI-Anfrage \\myserver\root\cimv2:win32_logicaldisk.name=„c:“ Anforderung WMI-Objekt Lokaler WMI-Service •Erfüllt lokale Anfragen •Leitet Remote-Anfragen weiter DCOM Remote WMI-Service •Ermittelt Werte mit Hilfe des Repository und den WMI-Providern Provider Repository WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 9 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 10 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 11 WQL Abfragesprache für Instanzen und Klassen innerhalb von WMI Subset von SQL Beispiele: • Alle Shares eines Systems: • Ein spezieller Share: SELECT * FROM win32_share SELECT * FROM win32_share WHERE name=‚public‘ WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 12 Demo WMI mit dem CIM-Studio erkunden WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 13 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 14 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 15 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 System.Management Management ObjectSearcher Operation Watcher Management Query ObjectQuery DataQuery Management ObjectCollection Management EventObject EventQuery SchemaQuery Management Object / Management Class Key Main Class EventWatcher Management Options Security Property Set QualifierSet MethodSet Main Collection Management Exception Property Qualifier Collection Can be obtained from WMI .NET Framework-Klassen in eigenen Anwendungen nutzen Method Management Path Management Scope 17 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 18 ManagementClass Repräsentiert eine WMI-Schemaklasse Scope • 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 19 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 20 ManagementClass – Beispiel 2 Boot-Delay per WMI .NET setzen ManagementClass c = new ManagementClass( "win32_computersystem"); ManagementObjectCollection col = c.GetInstances(); foreach (ManagementObject o in col) WMI .NET Framework-Klassen in eigenen Anwendungen nutzen o[„SystemStartUpDelay“] = 3; 21 Demo Processviewer mit WMI .NET WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 22 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 23 ManagementObject - II ClassPath • 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 24 ManagementObject - III Scope • Namespace des Objektes Path • Pfad zum Objekt Get() • bindet das .Net-Objekt an ein tatsächliches WMIObjekt. GetRelated() • “in Beziehung stehende” Objekte ermitteln (Anwendung bei Associations) GetRelationships() • Vorhandene Associations ermitteln WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 25 ManagementObject - IV Put() • Speichert gemachte Änderungen oder erzeugt neues WMIObjekt 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 26 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 27 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 28 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 29 ManagementObjectSearcher - II Scope • Query • WQL-Abfrage zum Anfordern der WMI-Objekte Options • Namespace auf den sich die Query / Enumeration bezieht Optionen für den Einsatz der Abfrage Get() • Ausführen der Abfrage WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 30 Demo Der RemoteProcessviewer WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 31 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) http://www.microsoft.com/downloads/release.asp?ReleaseID=311 55&area=search&ordinal=1 WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 32 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 33 Demo Typisierte WMI-Objekte WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 34 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 35 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 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 37 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 38 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 39 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 40 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 41 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 42 Demo Asynchrone Bearbeitung und Eventempfang WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 43 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: http://www.microsoft.com/management/wmi Core: http://www.microsoft.com/downloads/ release.asp?ReleaseId=18490 Frei redistribuierbar WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 44 Und…. WMI-Tutorial http://www.microsoft.com/downloads/release.asp ?ReleaseID=12570&area=search&ordinal=8 Desktop Management Task Force http://www.dmtf.org/ Managing Windows with WMI: http://msdn.microsoft.com/library/techart/mngwmi .htm Administering Windows and Applications across Your Enterprise: http://msdn.microsoft.com/msdnmag/issues/0500 /wmiover/wmiover.asp WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 45 Fragen!? Uff... WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 46