Esempio di Events01
Questo esempio illustra come creare un cmdlet che consente all'utente di registrarsi per gli eventi generati da System.IO.FileSystemWatcher. Con questo cmdlet, gli utenti possono registrare un'azione da eseguire quando viene creato un file in una directory specifica. Questo esempio deriva dalla classe di base Microsoft.PowerShell.Commands.ObjectEventRegistrationBase.
Come compilare l'esempio usando Visual Studio.
Con l Windows PowerShell SDK 2.0 installato, passare alla cartella Events01. Il percorso predefinito è
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0\Samples\sysmgmt\WindowsPowerShell\csharp\Events01
.Fare doppio clic sull'icona per il file di soluzione (sln). Verrà aperto il progetto di esempio in Microsoft Visual Studio.
Scegliere Compila soluzione dal menu Compila. La libreria per l'esempio verrà compilata nelle cartelle
\bin
o\bin\debug
predefinite.
Per eseguire l'esempio
Creare la cartella del modulo seguente:
[user]/documents/windowspowershell/modules/events01
Copiare il file di libreria per l'esempio nella cartella del modulo.
Avviare Windows PowerShell.
Eseguire il comando seguente per caricare il cmdlet in Windows PowerShell:
import-module events01
Usare il cmdlet Register-FileSystemEvent per registrare un'azione che scriverà un messaggio quando viene creato un file nella directory TEMP.
Register-FileSystemEvent $env:temp Created -filter "*.txt" -action { Write-Host "A file was created in the TEMP directory" }
Creare un file nella directory TEMP e notare che l'azione viene eseguita (viene visualizzato il messaggio).
Si tratta di un output di esempio che risulta seguendo questa procedura.
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
Requisiti
Questo esempio richiede Windows PowerShell 2.0.
Dimostra
Questo esempio illustra quanto segue.
Come scrivere un cmdlet per la registrazione degli eventi
Il cmdlet deriva dalla classe Microsoft.PowerShell.Commands.ObjectEventRegistrationBase, che fornisce il supporto per i parametri comuni ai Register-*Event
cmdlet. I cmdlet derivati da Microsoft.PowerShell.Commands.ObjectEventRegistrationBase devono solo definire i parametri specifici ed eseguire l'override dei GetSourceObject
metodi GetSourceObjectEventName
astratti e .
Esempio
Questo esempio illustra come eseguire la registrazione per gli eventi generati da 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;
}
}
}