Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo esempio illustra come sovrascrivere i metodi System.Management.Automation.Provider.DriveCmdletProvider.NewDrive* e System.Management.Automation.Provider.DriveCmdletProvider.RemoveDrive* per supportare le chiamate ai New-PSDrive cmdlet e Remove-PSDrive . La classe provider in questo esempio deriva dalla classe System.Management.Automation.Provider.DriveCmdletProvider .
Dimostra
Importante
La classe del provider probabilmente deriva da una delle classi seguenti ed eventualmente implementa altre interfacce del provider:
- classe System.Management.Automation.Provider.ItemCmdletProvider. Vedere AccessDBProviderSample03.
- classe System.Management.Automation.Provider.ContainerCmdletProvider. Vedere AccessDBProviderSample04.
- classe System.Management.Automation.Provider.NavigationCmdletProvider. Vedere AccessDBProviderSample05.
Per altre informazioni sulla scelta della classe del provider da cui derivare in base alle funzionalità del provider, vedere Progettazione del provider Windows PowerShell.
Questo esempio illustra quanto segue:
Dichiarazione dell'attributo
CmdletProvider.Definizione di una classe provider che deriva dalla classe System.Management.Automation.Provider.DriveCmdletProvider.
Sovrascrivendo il metodo System.Management.Automation.Provider.DriveCmdletProvider.NewDrive* per supportare la creazione di nuove unità. In questo esempio non viene illustrato come aggiungere parametri dinamici al cmdlet
New-PSDrive.Sovrascrivendo il metodo System.Management.Automation.Provider.DriveCmdletProvider.RemoveDrive* per supportare la rimozione delle unità esistenti.
Esempio
Questo esempio illustra come sovrascrivere i metodi System.Management.Automation.Provider.DriveCmdletProvider.NewDrive* e System.Management.Automation.Provider.DriveCmdletProvider.RemoveDrive* . Per questo provider di esempio, quando viene creata un'unità, le informazioni di connessione vengono archiviate in un oggetto AccessDBPsDriveInfo.
using System;
using System.IO;
using System.Data;
using System.Data.Odbc;
using System.Management.Automation;
using System.Management.Automation.Provider;
using System.ComponentModel;
namespace Microsoft.Samples.PowerShell.Providers
{
#region AccessDBProvider
/// <summary>
/// A PowerShell Provider which acts upon a access data store.
/// </summary>
/// <remarks>
/// This example only demonstrates the drive overrides
/// </remarks>
[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : DriveCmdletProvider
{
#region Drive Manipulation
/// <summary>
/// Create a new drive. Create a connection to the database file and set
/// the Connection property in the PSDriveInfo.
/// </summary>
/// <param name="drive">
/// Information describing the drive to add.
/// </param>
/// <returns>The added drive.</returns>
protected override PSDriveInfo NewDrive(PSDriveInfo drive)
{
// check if drive object is null
if (drive == null)
{
WriteError(new ErrorRecord(
new ArgumentNullException("drive"),
"NullDrive",
ErrorCategory.InvalidArgument,
null)
);
return null;
}
// check if drive root is not null or empty
// and if its an existing file
if (String.IsNullOrEmpty(drive.Root) || (File.Exists(drive.Root) == false))
{
WriteError(new ErrorRecord(
new ArgumentException("drive.Root"),
"NoRoot",
ErrorCategory.InvalidArgument,
drive)
);
return null;
}
// create a new drive and create an ODBC connection to the new drive
AccessDBPSDriveInfo accessDBPSDriveInfo = new AccessDBPSDriveInfo(drive);
OdbcConnectionStringBuilder builder = new OdbcConnectionStringBuilder();
builder.Driver = "Microsoft Access Driver (*.mdb)";
builder.Add("DBQ", drive.Root);
OdbcConnection conn = new OdbcConnection(builder.ConnectionString);
conn.Open();
accessDBPSDriveInfo.Connection = conn;
return accessDBPSDriveInfo;
} // NewDrive
/// <summary>
/// Removes a drive from the provider.
/// </summary>
/// <param name="drive">The drive to remove.</param>
/// <returns>The drive removed.</returns>
protected override PSDriveInfo RemoveDrive(PSDriveInfo drive)
{
// check if drive object is null
if (drive == null)
{
WriteError(new ErrorRecord(
new ArgumentNullException("drive"),
"NullDrive",
ErrorCategory.InvalidArgument,
drive)
);
return null;
}
// close ODBC connection to the drive
AccessDBPSDriveInfo accessDBPSDriveInfo = drive as AccessDBPSDriveInfo;
if (accessDBPSDriveInfo == null)
{
return null;
}
accessDBPSDriveInfo.Connection.Close();
return accessDBPSDriveInfo;
} // RemoveDrive
#endregion Drive Manipulation
} // AccessDBProvider
#endregion AccessDBProvider
#region AccessDBPSDriveInfo
/// <summary>
/// Any state associated with the drive should be held here.
/// In this case, it's the connection to the database.
/// </summary>
internal class AccessDBPSDriveInfo : PSDriveInfo
{
private OdbcConnection connection;
/// <summary>
/// ODBC connection information.
/// </summary>
public OdbcConnection Connection
{
get { return connection; }
set { connection = value; }
}
/// <summary>
/// Constructor that takes one argument
/// </summary>
/// <param name="driveInfo">Drive provided by this provider</param>
public AccessDBPSDriveInfo(PSDriveInfo driveInfo)
: base(driveInfo)
{ }
} // class AccessDBPSDriveInfo
#endregion AccessDBPSDriveInfo
}
Vedere anche
System.Management.Automation.Provider.ItemCmdletProvider
System.Management.Automation.Provider.ContainerCmdletProvider
System.Management.Automation.Provider.NavigationCmdletProvider