Freigeben über


Events01-Beispiel

In diesem Beispiel wird gezeigt, wie Sie ein Cmdlet erstellen, das es dem Benutzer ermöglicht, sich für Ereignisse zu registrieren, die von System.IO.FileSystemWatcherausgelöst werden. Mit diesem Cmdlet können Benutzer eine Aktion registrieren, die ausgeführt wird, wenn eine Datei in einem bestimmten Verzeichnis erstellt wird. Dieses Beispiel wird von der Basisklasse Microsoft.PowerShell.Commands.ObjectEventRegistrationBase abgeleitet.

Erstellen des Beispiels mithilfe von Visual Studio.

  1. Navigieren Sie bei installierter Windows PowerShell 2.0 SDK zum Ordner Events01. Der Standardspeicherort ist C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\WindowsPowerShell\csharp\Events01.

  2. Doppelklicken Sie auf das Symbol für die Projektmappendatei (SLN). Dadurch wird das Beispielprojekt in Microsoft Visual Studio geöffnet.

  3. Wählen Sie im Menü Erstellen die Option Projektmappe erstellen aus. Die Bibliothek für das Beispiel wird in den \bin \bin\debug Standardordnern oder erstellt.

Ausführen des Beispiels

  1. Erstellen Sie den folgenden Modulordner:

    [user]/documents/windowspowershell/modules/events01

  2. Kopieren Sie die Bibliotheksdatei für das Beispiel in den Modulordner.

  3. Starten Sie Windows PowerShell.

  4. Führen Sie den folgenden Befehl aus, um das Cmdlet in Windows PowerShell zu laden:

    import-module events01
    
  5. Verwenden Sie das cmdlet Register-FileSystemEvent , um eine Aktion zu registrieren, die eine Nachricht schreibt, wenn eine Datei im TEMP-Verzeichnis erstellt wird.

    Register-FileSystemEvent $env:temp Created -filter "*.txt" -action { Write-Host "A file was created in the TEMP directory" }
    
  6. Erstellen Sie eine Datei im Verzeichnis TEMP, und beachten Sie, dass die Aktion ausgeführt wird (die Meldung wird angezeigt).

Dies ist eine Beispielausgabe, die sich ergibt, indem Sie diese Schritte ausführen.

Id              Name            State      HasMoreData     Location             Command
--              ----            -----      -----------     --------             -------
1               26932870-d3b... NotStarted False                                 Write-Host "A f...

Set-Content $env:temp\test.txt "This is a test file"
A file was created in the TEMP directory

Anforderungen

Für dieses Beispiel ist Windows PowerShell 2.0 erforderlich.

Zeigt

In diesem Beispiel wird Folgendes veranschaulicht:

Schreiben eines Cmdlets für die Ereignisregistrierung

Das Cmdlet wird von der Microsoft.PowerShell.Commands.ObjectEventRegistrationBase-Klasse abgeleitet, die Unterstützung für Parameter bereitstellt, die den Cmdlets gemeinsam Register-*Event sind. Cmdlets, die von Microsoft.PowerShell.Commands.ObjectEventRegistrationBase abgeleitet sind, müssen nur ihre speziellen Parameter definieren und die GetSourceObject abstrakten Methoden und GetSourceObjectEventName überschreiben.

Beispiel

In diesem Beispiel wird gezeigt, wie Sie sich für Ereignisse registrieren, die von System.IO.FileSystemWatcherausgelöst werden.

namespace Sample
{
    using System;
    using System.IO;
    using System.Management.Automation;
    using System.Management.Automation.Runspaces;
    using Microsoft.PowerShell.Commands;

    [Cmdlet(VerbsLifecycle.Register, "FileSystemEvent")]
    public class RegisterObjectEventCommand : ObjectEventRegistrationBase
    {
        /// <summary>The FileSystemWatcher that exposes the events.</summary>
        private FileSystemWatcher fileSystemWatcher = new FileSystemWatcher();

        /// <summary>Name of the event to which the cmdlet registers.</summary>
        private string eventName = null;

        /// <summary>
        /// Gets or sets the path that will be monitored by the FileSystemWatcher.
        /// </summary>
        [Parameter(Mandatory = true, Position = 0)]
        public string Path
        {
            get
            {
                return this.fileSystemWatcher.Path;
            }

            set
            {
                this.fileSystemWatcher.Path = value;
            }
        }

        /// <summary>
        /// Gets or sets the name of the event to which the cmdlet registers.
        /// <para>
        /// Currently System.IO.FileSystemWatcher exposes 6 events: Changed, Created,
        /// Deleted, Disposed, Error, and Renamed. Check the documentation of
        /// FileSystemWatcher for details on each event.
        /// </para>
        /// </summary>
        [Parameter(Mandatory = true, Position = 1)]
        public string EventName
        {
            get
            {
                return this.eventName;
            }

            set
            {
                this.eventName = value;
            }
        }

        /// <summary>
        /// Gets or sets the filter that will be user by the FileSystemWatcher.
        /// </summary>
        [Parameter(Mandatory = false)]
        public string Filter
        {
            get
            {
                return this.fileSystemWatcher.Filter;
            }

            set
            {
                this.fileSystemWatcher.Filter = value;
            }
        }

        /// <summary>
        /// Derived classes must implement this method to return the object that generates
        /// the events to be monitored.
        /// </summary>
        /// <returns> This sample returns an instance of System.IO.FileSystemWatcher</returns>
        protected override object GetSourceObject()
        {
            return this.fileSystemWatcher;
        }

        /// <summary>
        /// Derived classes must implement this method to return the name of the event to
        /// be monitored. This event must be exposed by the input object.
        /// </summary>
        /// <returns> This sample returns the event specified by the user with the -EventName parameter.</returns>
        protected override string GetSourceObjectEventName()
        {
            return this.eventName;
        }
    }
}

Weitere Informationen

Schreiben eines Windows PowerShell-Cmdlets