Voorbeeld Events01

In dit voorbeeld ziet u hoe u een cmdlet maakt waarmee de gebruiker zich kan registreren voor gebeurtenissen die worden veroorzaakt door System.IO.FileSystemWatcher. Met deze cmdlet kunnen gebruikers een actie registreren die moet worden uitgevoerd wanneer een bestand wordt gemaakt onder een specifieke map. Dit voorbeeld is afgeleid van de basisklasse Microsoft.PowerShell.Commands.ObjectEventRegistrationBase.

Het voorbeeld bouwen met behulp van Visual Studio.

  1. Als de Windows PowerShell 2.0 SDK is geïnstalleerd, gaat u naar de map Events01. De standaardlocatie is C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\WindowsPowerShell\csharp\Events01.

  2. Dubbelklik op het pictogram voor het oplossingsbestand (.sln). Hiermee opent u het voorbeeldproject in Microsoft Visual Studio.

  3. Selecteer In het menu Bouwen de optie Oplossing bouwen. De bibliotheek voor het voorbeeld wordt gebouwd in de standaard- \bin of \bin\debug mappen.

Het voorbeeld uitvoeren

  1. Maak de volgende modulemap:

    [user]/documents/windowspowershell/modules/events01

  2. Kopieer het bibliotheekbestand voor het voorbeeld naar de modulemap.

  3. Start Windows PowerShell.

  4. Voer de volgende opdracht uit om de cmdlet in de Windows PowerShell:

    import-module events01
    
  5. Gebruik de Register-FileSystemEvent cmdlet om een actie te registreren die een bericht schrijft wanneer een bestand wordt gemaakt in de TEMP-map.

    Register-FileSystemEvent $env:temp Created -filter "*.txt" -action { Write-Host "A file was created in the TEMP directory" }
    
  6. Maak een bestand onder de map TEMP en merk op dat de actie wordt uitgevoerd (het bericht wordt weergegeven).

Dit is een voorbeelduitvoer die het resultaat is door deze stappen te volgen.

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

Vereisten

Voor dit voorbeeld is Windows PowerShell 2.0 vereist.

Demonstreert

In dit voorbeeld wordt het volgende gedemonstreerd.

Een cmdlet schrijven voor gebeurtenisregistratie

De cmdlet is afgeleid van de klasse Microsoft.PowerShell.Commands.ObjectEventRegistrationBase, die ondersteuning biedt voor parameters die gemeenschappelijk zijn voor Register-*Event de cmdlets. Cmdlets die zijn afgeleid van Microsoft.PowerShell.Commands.ObjectEventRegistrationBase hoeven alleen hun specifieke parameters te definiëren en de abstracte methoden en GetSourceObject GetSourceObjectEventName te overschrijven.

Voorbeeld

In dit voorbeeld ziet u hoe u zich registreert voor gebeurtenissen die worden veroorzaakt door 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;
        }
    }
}

Zie ook

Een Windows PowerShell-cmdlet schrijven