AccessDBProviderSample02
In diesem Beispiel wird gezeigt, wie die Methoden System.Management.Automation.Provider.Drivecmdletprovider.Newdrive* und System.Management.Automation.Provider.Drivecmdletprovider.Removedrive* überschrieben werden, um Aufrufe der Cmdlets und zu New-PSDrive
Remove-PSDrive
unterstützen. Die Anbieterklasse in diesem Beispiel wird von der System.Management.Automation.Provider.Drivecmdletprovider-Klasse abgeleitet.
Zeigt
Wichtig
Ihre Anbieterklasse wird höchstwahrscheinlich von einer der folgenden Klassen ableiten und möglicherweise andere Anbieterschnittstellen implementieren:
- System.Management.Automation.Provider.Itemcmdletprovider-Klasse. Weitere Informationen finden Sie unter AccessDBProviderSample03.
- System.Management.Automation.Provider.Containercmdletprovider-Klasse. Weitere Informationen finden Sie unter AccessDBProviderSample04.
- System.Management.Automation.Provider.Navigationcmdletprovider-Klasse. Weitere Informationen finden Sie unter AccessDBProviderSample05.
Weitere Informationen zum Auswählen der Anbieterklasse, von der basierend auf Anbieterfeatures ableiten werden soll, finden Sie unter Designing Your Windows PowerShell Provider.
Dieses Beispiel zeigt Folgendes:
Deklarieren des
CmdletProvider
Attributs.Definieren einer Anbieterklasse, die von der System.Management.Automation.Provider.Drivecmdletprovider-Klasse aus laufwerkiert.
Überschreiben der System.Management.Automation.Provider.Drivecmdletprovider.Newdrive*-Methode zur Unterstützung der Erstellung neuer Laufwerke. (In diesem Beispiel wird nicht gezeigt, wie dem Cmdlet dynamische Parameter hinzugefügt
New-PSDrive
werden.)Überschreiben der System.Management.Automation.Provider.Drivecmdletprovider.Removedrive*-Methode, um das Entfernen vorhandener Laufwerke zu unterstützen.
Beispiel
In diesem Beispiel wird gezeigt, wie die Methoden System.Management.Automation.Provider.Drivecmdletprovider.Newdrive* und System.Management.Automation.Provider.Drivecmdletprovider.Removedrive* überschrieben werden. Für diesen Beispielanbieter werden beim Erstellen eines Laufwerks die Verbindungsinformationen in einem -Objekt AccessDBPsDriveInfo
gespeichert.
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
}
Weitere Informationen
System.Management.Automation.Provider.Itemcmdletprovider
System.Management.Automation.Provider.Containercmdletprovider
System.Management.Automation.Provider.Navigationcmdletprovider
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für