Dirk Primbs PSS Developer Support Microsoft GmbH Email: [email protected] WMI.NET...
-
Upload
wieland-bornmann -
Category
Documents
-
view
109 -
download
2
Transcript of Dirk Primbs PSS Developer Support Microsoft GmbH Email: [email protected] WMI.NET...
Dirk PrimbsPSS Developer Support
Microsoft GmbH
Email: [email protected]
WMI .NET Framework-Klassen in WMI .NET Framework-Klassen in
eigenen Anwendungen nutzeneigenen Anwendungen nutzen
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
AgendaAgenda
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?
Welche Grafikkarte?Welche Grafikkarte?
Routing-Tabelle?Routing-Tabelle?
Installierte Netzwerkshares?
Installierte Netzwerkshares?
Prozeß remote beenden?Prozeß remote beenden?
Läuft das Programm XY noch?Läuft das Programm XY noch?
Rechner zuschalten bei hoher Prozessorlast!
Rechner zuschalten bei hoher Prozessorlast!
Installierte Software?Installierte Software?
Laufende Services?Laufende Services?
Performance Counter?Performance Counter?
DHCP aktivieren!DHCP aktivieren!
System neu booten bei hoher Speicherauslastung?
System neu booten bei hoher Speicherauslastung?
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
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
WBEMWBEMConsumerConsumer
WMI ProvidersWMI Providers(werden bei Bedarf geladen)(werden bei Bedarf geladen)
DCOMDCOM
SNMPSNMP ActiveActiveDirectoryDirectory
WMIWMIext forext forWDMWDM
NT EventNT EventLogLog
PerfPerfCountersCountersRegistryRegistry
CIM – Management SchemaCIM – Management Schema
WMI ServicesWMI ServicesPub/SubPub/SubServiceService
CorrelationCorrelationServiceService
Event Event FilteringFiltering
QueryQueryServiceService
CIM RepositoryCIM Repository
DCOMDCOM
ODBCODBCAdapterAdapter
ODBCODBCClientClient
SWBEM…SWBEM…ScriptScript COM APICOM APICOMCOMClientClient
WMI Architektur
WMI managed-WMI managed-code APIscode APIs
ManagedManagedCodeCodeClientClient
WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 8
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
AnforderungAnforderung Lokaler WMI-Service •Erfüllt lokale Anfragen
•Leitet Remote-Anfragen weiter
Lokaler WMI-Service •Erfüllt lokale Anfragen
•Leitet Remote-Anfragen weiter
Remote WMI-Service•Ermittelt Werte mit Hilfe des
Repository und den WMI-Providern
Remote WMI-Service•Ermittelt Werte mit Hilfe des
Repository und den WMI-Providern
WMI-ObjektWMI-Objekt
\\myserver\root\cimv2:win32_logicaldisk.name=„c:“
\\myserver\root\cimv2:win32_logicaldisk.name=„c:“
DCOMDCOM
RepositoryRepositoryProviderProvider
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
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
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
WinMgmt Service WinMgmt Service ( CIMOM )( CIMOM )
COM InterfacesCOM Interfaces
ProviderProvider(DLL, EXE)(DLL, EXE)
CIM CIM RepositoryRepository
.NET WMI API.NET WMI API
.NET Application.NET Application.NET WMI Interfaces.NET WMI Interfaces
….Net.Net
InstrumentationInstrumentation
.NET WMI Instrumentation.NET WMI InstrumentationInterfacesInterfaces
WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 15
AgendaAgenda
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
AgendaAgenda
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
System.Management
Main Collection
ManagementOptions
ManagementQuery
ManagementObjectSearcher
EventWatcher
ManagementEventObject
OperationWatcher
ManagementObject /
Management Class
ManagementObjectCollection
MethodQualifierProperty
Property Set QualifierSet MethodSet
ObjectQuery EventQuery
DataQuery SchemaQuery
KeyKeyMain Class
Collection
Can be obtained fromCan be obtained from
ManagementPath
ManagementScope
ManagementException
Security
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
• 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 = newManagementClass("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
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
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 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
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
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
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)http://www.microsoft.com/downloads/release.asp?
ReleaseID=31155&area=search&ordinal=1
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
AgendaAgenda
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
AgendaAgenda
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
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
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
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 erzeugenWqlEventQuery query = new WqlEventQuery("__InstanceModificationEvent",
new TimeSpan(0,0,1), "TargetInstance isa \"Win32_Service\"");
// Eventbindung anlegenManagementEventWatcher watcher = new
ManagementEventWatcher(query);
// Event abwartenManagementBaseObject e = watcher.WaitForNextEvent();ManagementObject e2 =
(ManagementBaseObject)e["TargetInstance"];
Console.WriteLine("Service {0}, Status {1}",e2["Name“], e2["State"]);
// Eventbindung lösenwatcher.Stop();
WMI .NET Framework-Klassen in eigenen Anwendungen nutzen 42
Events asynchron empfangen
// Rückruffunktion bei eintreffenden Eventspublic class EventHandlerClass {
public void Arrived(object sender, EventArrivedEventArgs e) {
Console.WriteLine(„Event arrived!“);}
}
...
// Delegate einbindenEventHandlerClass c = new EventHandlerClass();watcher.EventArrived += new EventArrivedHandler(c.Arrived);
// Eventempfang startenwatcher.Start();
// … Programmcode …
// Eventbindung lösenwatcher.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:
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 45
Und….
WMI-Tutorial http://www.microsoft.com/downloads/release.asp?ReleaseID=12570&area=search&ordinal=8
Desktop Management Task Forcehttp://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 46
Fragen!?
Uff...Uff...