Events01 – exempel

Det här exemplet visar hur du skapar en cmdlet som gör att användaren kan registrera sig för händelser som utlöses av System.IO.FileSystemWatcher. Med den här cmdleten kan användare registrera en åtgärd som ska köras när en fil skapas under en specifik katalog. Det här exemplet härleds från basklassen Microsoft.PowerShell.Commands.ObjectEventRegistrationBase.

Hur du skapar exemplet med hjälp av Visual Studio.

  1. När du Windows PowerShell 2.0 SDK navigerar du till mappen Events01. Standardplatsen är C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\WindowsPowerShell\csharp\Events01.

  2. Dubbelklicka på ikonen för lösningsfilen (.sln). Exempelprojektet öppnas i Microsoft Visual Studio.

  3. På menyn Build (Skapa) väljer du Build Solution (Skapa lösning). Biblioteket för exemplet kommer att byggas i \bin standardmapparna eller \bin\debug .

Köra exemplet

  1. Skapa följande modulmapp:

    [user]/documents/windowspowershell/modules/events01

  2. Kopiera biblioteksfilen för exemplet till modulmappen.

  3. Starta Windows PowerShell

  4. Kör följande kommando för att läsa in cmdleten i Windows PowerShell:

    import-module events01
    
  5. Använd cmdleten Register-FileSystemEvent för att registrera en åtgärd som skriver ett meddelande när en fil skapas under TEMP-katalogen.

    Register-FileSystemEvent $env:temp Created -filter "*.txt" -action { Write-Host "A file was created in the TEMP directory" }
    
  6. Skapa en fil under TEMP-katalogen och observera att åtgärden körs (meddelandet visas).

Det här är ett exempel på utdata som resulterar genom att följa de här stegen.

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

Krav

Det här exemplet kräver Windows PowerShell 2.0.

Demonstrationer

Det här exemplet visar följande.

Skriva en cmdlet för händelseregistrering

Cmdleten härleds från klassen Microsoft.PowerShell.Commands.ObjectEventRegistrationBase, som tillhandahåller stöd för parametrar som är gemensamma för Register-*Event cmdletarna. Cmdlets som härleds från Microsoft.PowerShell.Commands.ObjectEventRegistrationBase behöver bara definiera sina specifika parametrar och åsidosätta de GetSourceObject GetSourceObjectEventName abstrakta metoderna och .

Exempel

Det här exemplet visar hur du registrerar för händelser som utlöses av System.IO.FileSystemWatcher.

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;
        }
    }
}

Se även

Skriva en Windows PowerShell-cmdlet