Share via


Senden von E-Mails basierend auf einem Ereignis

Mithilfe der SMTPEventConsumer-Klasse können Sie E-Mails an bestimmte Benutzer*innen senden, wenn ein bestimmtes Ereignis eintritt. Diese Klasse ist ein Standardereignisconsumer, den WMI bereitstellt.

Für die Klasse SMTPEventConsumer müssen die folgenden Bedingungen erfüllt sein, damit als Reaktion auf ein Ereignis eine E-Mail-Nachricht gesendet werden kann:

Das grundlegende Verfahren für die Verwendung von Standardconsumern ist immer identisch und wird unter Überwachen von Ereignissen und Reagieren auf Ereignisse mit Standardconsumern beschrieben. Die folgende Prozedur ergänzt das grundlegende Verfahren, ist spezifisch für die Klasse SMTPEventConsumer und beschreibt, wie ein Ereignisconsumer erstellt wird, der E-Mails sendet.

Im folgenden Verfahren wird beschrieben, wie Sie einen Ereignisconsumer erstellen, der E-Mails sendet.

So erstellen Sie einen Ereignisconsumer, der E-Mails sendet

  1. Installieren und registrieren Sie die Klasse SMTPEventConsumer, sofern erforderlich.

    Die Klasse SMTPEventConsumer wird vom WMI-Setup-Programm in den Namespace „root\subscription“ kompiliert.

  2. Identifizieren Sie das Ereignis, das Sie überwachen möchten, und erstellen Sie die Ereignisabfrage.

    Möglicherweise gibt es bereits ein systeminternes Ereignis, das Sie für die Überwachung verwenden können. Die meisten systeminternen Ereignisse sind mit Änderungen an Klasseninstanzen im Namespace „root\cimv2“ verbunden. Durch eine Analyse der Klassen in der WMI-Klassenreferenz können Sie wahrscheinlich eine Klasse ermitteln, die das zu überwachende Ereignis identifiziert. Verwenden Sie zum Beispiel die Klasse Win32_LogicalDisk, um Änderungen an einem Festplattenlaufwerk zu überwachen.

    Wenn keine systeminternen Ereignisse vorhanden sind, die Sie verwenden können, gibt es vielleicht einen Anbieter für extrinsische Ereignisse, der geeignet ist. Verwenden Sie beispielsweise die RegistryTreeChangeEvent-Klasse des Registrierungsanbieters, um Änderungen an der Systemregistrierung zu überwachen.

    Wenn keine Klasse zur Identifizierung des Ereignisses vorhanden ist, das Sie überwachen möchten, müssen Sie einen eigenen Ereignisanbieter erstellen und neue extrinsische Ereignisklassen definieren. Weitere Informationen finden Sie unter Schreiben eines Ereignisanbieters.

  3. Erstellen Sie in der MOF-Datei (Managed Object Format) eine Instanz von SMTPEventConsumer, um Ereignisse zu empfangen.

    Definieren Sie anhand der Eigenschaften der Instanz die E-Mail-Nachricht, die bei Auftreten eines Ereignisses gesendet werden soll. Beispielsweise definiert die Eigenschaft ToLine die E-Mail-Adresse und die Eigenschaft Message den Text der E-Mail-Nachricht. Sie müssen die E-Mail-Adresse, den Betreff und den Text einer Nachricht festlegen, die E-Mail-Nachricht darf jedoch keine Anlage enthalten. Weitere Informationen finden Sie unter Entwerfen von MOF-Klassen (Managed Object Format).

  4. Erstellen Sie eine Ereignisabfrage, die die zu überwachenden Ereignisse angibt.

    Weitere Informationen finden Sie unter Abfragen mit WQL.

  5. Erstellen Sie eine Instanz von __EventFilter, und speichern Sie Ihre Abfrage in der Eigenschaft Query.

    Weitere Informationen finden Sie unter Abfragen mit WQL.

  6. Erstellen Sie eine Instanz von __FilterToConsumerBinding, um den Filter und den Consumer zuzuordnen.

  7. Kompilieren Sie die MOF-Datei mit Mofcomp.exe.

Beispiel

Das Beispiel in diesem Abschnitt basiert auf MOF-Code, aber Sie können die Instanzen auch programmgesteuert erstellen, indem Sie die Skript-API für WMI oder die COM-API für WMI verwenden.

Nachfolgend wird beschrieben, wie Sie das Beispiel verwenden.

So verwenden Sie das Beispiel

  1. Kopieren Sie die folgende MOF-Datei in eine Textdatei, und speichern Sie sie mit der Erweiterung „.mof“.

  2. Kompilieren Sie die MOF-Datei in einem Eingabeaufforderungsfenster mit dem folgenden Befehl:

    MofcompDateiname**.mof**

Hinweis

Wenn Sie MOF-Code in den Namespace „root\subscription“ kompilieren, wird der SMTPEventConsumer in denselben Namespace kompiliert.

 

#pragma namespace ("\\\\.\\root\\subscription")

instance of __EventFilter as $FILTER
{
    Name = "LowDiskspaceFilter";
    
    EventNamespace = "\\\\.\\root\\cimv2";  

    Query = "SELECT * FROM __InstanceModificationEvent WITHIN 10 "
            "WHERE TargetInstance ISA \"Win32_LogicalDisk\" "
            "AND TargetInstance.FreeSpace < 846000000 "
            "AND PreviousInstance.FreeSpace >= 846000000 "
            "AND (TargetInstance.DeviceID = \"C:\" "
            "OR TargetInstance.DeviceID = \"D:\")";
    QueryLanguage = "WQL";
};


instance of SMTPEventConsumer as $CONSUMER
{
    Name = "LowDisk";
    ToLine = "SysAd@MyCompany.com, MyAlias@MyCompany.com";
    CcLine = "MyHome@MyISP.com";
    ReplyToLine = "MyAlias@MyCompany.com";
    SMTPServer = "SmartHost";
    Subject = "WARNING: Low disk space";
    Message = "WARNING: Your %TargetInstance.DeviceID% is"
        " getting dangerously low.";
};

instance of __FilterToConsumerBinding
{
    Consumer = $CONSUMER ;
    Filter = $FILTER ;
};

Überwachen von Ereignissen und Reagieren auf Ereignisse mit Standardconsumern