Partager via


Exposition de données de gestion

Dans un scénario de gestion de données, le développeur peut décider d'exposer une classe pour la gestion.

Une classe .NET Framework est définie, implémentée et marquée pour la gestion. Ceci peut s'effectuer en utilisant l'attribut InstrumentationClass(InstrumentationType.Instance) sur la classe ou en la dérivant de la classe Instance. Ainsi est généré automatiquement le schéma WMI de la classe de code managé. Les instances de la classe sont exposées en tant qu'instances WMI, toutes les valeurs de propriété étant mappées.

La définition des classes d'instrumentation s'effectue au moment du design (ou au moment de la compilation) et ne constitue que la première moitié de la responsabilité d'une application. Au moment de l'exécution, il reste à l'application à fournir des données réelles. Les développeurs de code managé n'ont pas besoin d'apprendre de nouvelles méthodes pour formater les données dans une structure consommable par WMI. En utilisant les mêmes classes managées qui définissent les classes d'instrumentation WMI, les applications gérées fournissent des données en instanciant la classe et en remplissant les champs. Les données exposées à travers WMI sont lues directement dans les champs et les propriétés de classe managée.

En résumé, pour faire remonter des informations d'instrumentation à travers WMI, le développeur de code managé doit procéder de la façon suivante :

  • Définissez les classes managées (dans n'importe quel langage pris en charge) qui décrivent l'instrumentation.

    Ces classes managées sont mappées sur des classes WMI sans qu'il soit nécessaire de comprendre les méthodes WMI, ni la grammaire à utiliser pour définir des classes WMI.

  • Au moment de l'exécution, les informations sont remontées à WMI en instanciant les classes, en remplissant les champs et en publiant les instances.

L'exemple de code suivant montre comment créer une classe d'instrumentation de gestion et comment publier une instance de cette classe vers WMI :

using System;
using System.Management;
using System.Configuration.Install;
using System.Management.Instrumentation;

// This example demonstrate how to define a management instrumentation 
// class and how to publish an instance of this class to WMI.

// Specify which namespace the data should be published into
[assembly:Instrumented("root/default")]

// Let the system know InstallUtil.exe utility will be run against 
// this assembly
[System.ComponentModel.RunInstaller(true)]
public class MyInstaller : DefaultManagementProjectInstaller {}   

// Define a management instrumentation class
[InstrumentationClass(InstrumentationType.Instance)]
public class InstanceClass {
    public string Name;
    public int Number;
}
public class Sample_InstanceProvider {
    public static int Main(string[] args) {
        InstanceClass instClass = new InstanceClass();
        instClass. Name = "Hello";
        instClass. Number = 888;
        // Publish this instance to WMI
        Instrumentation.Publish(instClass);        
        Console.WriteLine("Instance now visible through WMI");
        Console.ReadLine();
        Instrumentation.Revoke(instClass); //optional
        return 0;
    }
}

[Visual Basic]
Imports System
Imports System.Management
Imports System.Configuration.Install
Imports System.Management.Instrumentation

' This example demonstrate how to define a management instrumentation
' class and how to publish an instance of this class to WMI.

' Specify which namespace the data should be published into
<assembly: Instrumented("Root/Default")>

' Let the system know InstallUtil.exe utility will be run against 
' this assembly
<System.ComponentModel.RunInstaller(True)>  _
Public Class MyInstaller
   Inherits DefaultManagementProjectInstaller
End Class 

' Create a management instrumentation instance class
<InstrumentationClass(InstrumentationType.Instance)>  _
Public Class InstanceClass
   Public Name As String
   Public Number As Integer
End Class 

Public Class Sample_InstanceProvider      
   Overloads Public Shared Function Main(args() As String) As Integer
      Dim instClass As New InstanceClass()
      instClass.Name = "Hello"
      instClass.Number = 888
      ' Publish this instance to WMI
      System.Management.Instrumentation.Instrumentation.Publish(instClass) 
      Console.WriteLine("Instance now visible through WMI")
      Console.ReadLine()
      System.Management.Instrumentation.Instrumentation.Revoke(instClass)
      Return 0
   End Function 
End Class

Voir aussi

Instrumentation des applications .NET Framework avec System.Management | Classes et mappage dans CLI et WMI | Exposition d'événements de gestion | Héritage | Inscription du schéma pour une application instrumentée