AccessDBProviderSample02
In dit voorbeeld ziet u hoe u de methoden System.Management.Automation.Provider.Drivecmdletprovider.Newdrive* en System.Management.Automation.Provider.Drivecmdletprovider.Removedrive* overschrijft om aanroepen naar de New-PSDrive
Remove-PSDrive
cmdlets en te ondersteunen. De providerklasse in dit voorbeeld is afgeleid van de klasse System.Management.Automation.Provider.Drivecmdletprovider.
Demonstreert
Belangrijk
Uw providerklasse is waarschijnlijk afgeleid van een van de volgende klassen en implementeert mogelijk andere providerinterfaces:
- De klasse System.Management.Automation.Provider.Itemcmdletprovider. Zie AccessDBProviderSample03.
- De klasse System.Management.Automation.Provider.Containercmdletprovider. Zie AccessDBProviderSample04.
- De klasse System.Management.Automation.Provider.Navigationcmdletprovider. Zie AccessDBProviderSample05.
Zie Uw provider ontwerpen voor meer informatie over het kiezen van welke providerklasse moet worden afgeleid op basis van Windows PowerShell providerfuncties.
In dit voorbeeld wordt het volgende gedemonstreerd:
Het kenmerk
CmdletProvider
declareren.Definieer een providerklasse die wordt aansturing vanuit de klasse System.Management.Automation.Provider.Drivecmdletprovider.
Overschrijf de methode System.Management.Automation.Provider.Drivecmdletprovider.Newdrive* om het maken van nieuwe stations te ondersteunen. (Dit voorbeeld laat niet zien hoe u dynamische parameters toevoegt aan de
New-PSDrive
cmdlet.)Overschrijf de methode System.Management.Automation.Provider.Drivecmdletprovider.Removedrive* om het verwijderen van bestaande stations te ondersteunen.
Voorbeeld
In dit voorbeeld ziet u hoe u de methoden System.Management.Automation.Provider.Drivecmdletprovider.Newdrive* en System.Management.Automation.Provider.Drivecmdletprovider.Removedrive* overschrijft. Voor deze voorbeeldprovider wordt bij het maken van een station de verbindingsgegevens opgeslagen in een 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
}
Zie ook
System.Management.Automation.Provider.Itemcmdletprovider
System.Management.Automation.Provider.Containercmdletprovider
System.Management.Automation.Provider.Navigationcmdletprovider
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor