AccessDBProviderSample02
Cet exemple montre comment remplacer les méthodes System. Management. Automation. Provider. Drivecmdletprovider. les * et System. Management. Automation. Provider. Drivecmdletprovider. Removedrive * pour prendre en charge les appels aux New-PSDrive
applets de commande et Remove-PSDrive
. La classe de fournisseur de cet exemple dérive de la classe System. Management. Automation. Provider. Drivecmdletprovider .
Illustre le
Important
Votre classe de fournisseur va probablement dériver de l’une des classes suivantes et éventuellement implémenter d’autres interfaces de fournisseur :
- Classe System. Management. Automation. Provider. Itemcmdletprovider . Consultez AccessDBProviderSample03.
- Classe System. Management. Automation. Provider. Containercmdletprovider . Consultez AccessDBProviderSample04.
- Classe System. Management. Automation. Provider. Navigationcmdletprovider . Consultez AccessDBProviderSample05.
pour plus d’informations sur le choix de la classe de fournisseur à partir de laquelle dériver les fonctionnalités du fournisseur, consultez conception de votre fournisseur de Windows PowerShell.
Cet exemple indique :
Déclaration de l'
CmdletProvider
attribut.Définition d’une classe de fournisseur qui pilote à partir de la classe System. Management. Automation. Provider. Drivecmdletprovider .
Remplacement de la méthode System. Management. Automation. Provider. Drivecmdletprovider. les * pour prendre en charge la création de nouveaux lecteurs. (Cet exemple n’indique pas comment ajouter des paramètres dynamiques à l'
New-PSDrive
applet de commande.)Remplacement de la méthode System. Management. Automation. Provider. Drivecmdletprovider. Removedrive * pour prendre en charge la suppression des lecteurs existants.
Exemple
Cet exemple montre comment remplacer les méthodes System. Management. Automation. Provider. Drivecmdletprovider. les * et System. Management. Automation. Provider. Drivecmdletprovider. Removedrive * . Pour cet exemple de fournisseur, lorsqu’un lecteur est créé, ses informations de connexion sont stockées dans un AccessDBPsDriveInfo
objet.
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
}
Voir aussi
System. Management. Automation. Provider. Itemcmdletprovider
System. Management. Automation. Provider. Containercmdletprovider
System. Management. Automation. Provider. Navigationcmdletprovider
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour