AccessDBProviderSample02AccessDBProviderSample02

Questo esempio illustra come sovrascrivere i metodi System. Management. Automation. provider. Drivecmdletprovider. nuovaunità * e System. Management. Automation. provider. Drivecmdletprovider. Removedrive * per supportare le chiamate ai New-PSDrive Remove-PSDrive cmdlet e.This sample shows how to overwrite the System.Management.Automation.Provider.Drivecmdletprovider.Newdrive* and System.Management.Automation.Provider.Drivecmdletprovider.Removedrive* methods to support calls to the New-PSDrive and Remove-PSDrive cmdlets. La classe del provider in questo esempio deriva dalla classe System. Management. Automation. provider. Drivecmdletprovider .The provider class in this sample derives from the System.Management.Automation.Provider.Drivecmdletprovider class.

DimostraDemonstrates

Importante

È probabile che la classe del provider derivi da una delle classi seguenti e possa implementare altre interfacce del provider:Your provider class will most likely derive from one of the following classes and possibly implement other provider interfaces:

Per ulteriori informazioni sulla scelta della classe del provider da derivare da in base alle funzionalità del provider, vedere progettazione del provider di Windows PowerShell.For more information about choosing which provider class to derive from based on provider features, see Designing Your Windows PowerShell Provider.

Questo esempio illustra i seguenti elementi:This sample demonstrates the following:

EsempioExample

Questo esempio illustra come sovrascrivere i metodi System. Management. Automation. provider. Drivecmdletprovider. nuovaunità * e System. Management. Automation. provider. Drivecmdletprovider. Removedrive * .This sample shows how to overwrite the System.Management.Automation.Provider.Drivecmdletprovider.Newdrive* and System.Management.Automation.Provider.Drivecmdletprovider.Removedrive* methods. Per questo provider di esempio, quando viene creata un'unità, le informazioni di connessione vengono archiviate in un AccessDBPsDriveInfo oggetto.For this sample provider, when a drive is created its connection information is stored in an AccessDBPsDriveInfo object.

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 ancheSee Also

System. Management. Automation. provider. ItemcmdletproviderSystem.Management.Automation.Provider.Itemcmdletprovider

System. Management. Automation. provider. ContainercmdletproviderSystem.Management.Automation.Provider.Containercmdletprovider

System. Management. Automation. provider. NavigationcmdletproviderSystem.Management.Automation.Provider.Navigationcmdletprovider

Progettazione del provider di Windows PowerShellDesigning Your Windows PowerShell Provider