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.
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
.Doppelklicken Sie auf das Symbol für die Projektmappendatei (SLN). Dadurch wird das Beispielprojekt in Microsoft Visual Studio geöffnet.
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
Erstellen Sie den folgenden Modulordner:
[user]/documents/windowspowershell/modules/events01
Kopieren 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 events01
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" }
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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für