WMI .NET Framework-Klassen in eigenen Anwendungen nutzen Dirk Primbs PSS Developer Support Microsoft GmbH Email: [email protected].

Download Report

Transcript 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