Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Beispiel wird gezeigt, wie Sie ein Cmdlet erstellen, mit dem der Benutzer sich für Ereignisse registrieren kann, die von System.IO.FileSystemWatcherausgelöst werden. Mit diesem Cmdlet können Benutzer eine Auszuführende Aktion registrieren, wenn eine Datei unter einem bestimmten Verzeichnis erstellt wird. Dieses Beispiel wird von der Microsoft.PowerShell.Commands.ObjectEventRegistrationBase Basisklasse abgeleitet.
Erstellen des Beispiels mithilfe von Visual Studio
Navigieren Sie mit dem installierten 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.Doppelklicken Sie auf das Symbol für die Lösungsdatei (.sln). Dadurch wird das Beispielprojekt in Microsoft Visual Studio geöffnet.
Wählen Sie im Menü ErstellenProjektmappe erstellen aus, um die Bibliothek für das Beispiel in den Standardordnern
\binoder\bin\debugzu erstellen.
Wie das Beispiel ausgeführt wird
Erstellen Sie den folgenden Modulordner:
[user]\Documents\WindowsPowerShell\Modules\events01Kopieren Sie die Bibliotheksdatei für das Beispiel in den Modulordner.
Starten Sie Windows PowerShell.
Führen Sie den folgenden Befehl aus, um das Cmdlet in Windows PowerShell zu laden:
Import-Module events01Verwenden Sie das Cmdlet Register-FileSystemEvent, um eine Aktion zu registrieren, die beim Erstellen einer Datei im TEMP-Verzeichnis eine Nachricht schreibt.
Register-FileSystemEvent $Env:TEMP Created -Filter "*.txt" -Action { Write-Host "A file was created in the TEMP directory" }Erstellen Sie eine Datei unter dem TEMP-Verzeichnis, und beachten Sie, dass die Aktion ausgeführt wird (die Meldung wird angezeigt).
Dies ist eine Beispielausgabe, die durch Ausführen dieser Schritte zu Ergebnissen führt.
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
In diesem Beispiel ist Windows PowerShell 2.0 erforderlich.
Veranschaulichung
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 für die Register-*Event Cmdlets gemeinsam verwendet werden. Cmdlets, die von Microsoft.PowerShell.Commands.ObjectEventRegistrationBase abgeleitet werden, müssen nur ihre spezifischen Parameter definieren und die GetSourceObject- und GetSourceObjectEventName abstrakten Methoden außer Kraft setzen.
Beispiel
In diesem Beispiel wird gezeigt, wie Ereignisse registriert werden, 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;
}
}
}