Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här exemplet visar hur du skriver över System.Management.Automation.Provider.DriveCmdletProvider.NewDrive* och System.Management.Automation.Provider.DriveCmdletProvider.RemoveDrive* metoder för att stödja anrop till cmdletarna New-PSDrive och Remove-PSDrive. Providerklassen i det här exemplet härleds från klassen System.Management.Automation.Provider.DriveCmdletProvider.
Demonstrerar
Viktigt!
Providerklassen kommer troligen att härledas från någon av följande klasser och eventuellt implementera andra providergränssnitt:
- System.Management.Automation.Provider.ItemCmdletProvider-klass. Se AccessDBProviderSample03.
- System.Management.Automation.Provider.ContainerCmdletProvider-klass. Se AccessDBProviderSample04.
- System.Management.Automation.Provider.NavigationCmdletProvider-klass. Se AccessDBProviderSample05.
Mer information om hur du väljer vilken providerklass som ska härledas från baserat på providerfunktioner finns i Designing Your Windows PowerShell Provider.
Det här exemplet visar följande:
Deklarera attributet
CmdletProvider.Definiera en providerklass som kör från klassen System.Management.Automation.Provider.DriveCmdletProvider.
Skriva över System.Management.Automation.Provider.DriveCmdletProvider.NewDrive* metod för att skapa nya enheter. (Det här exemplet visar inte hur du lägger till dynamiska parametrar i cmdleten
New-PSDrive.)Skriva över metoden System.Management.Automation.Provider.DriveCmdletProvider.RemoveDrive* för att stödja borttagning av befintliga enheter.
Exempel
Det här exemplet visar hur du skriver över System.Management.Automation.Provider.DriveCmdletProvider.NewDrive* och System.Management.Automation.Provider.DriveCmdletProvider.RemoveDrive* metoder. För den här exempelprovidern lagras dess anslutningsinformation i ett AccessDBPsDriveInfo objekt när en enhet skapas.
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
}
Se även
System.Management.Automation.Provider.ItemCmdletProvider
System.Management.Automation.Provider.ContainerCmdletProvider
System.Management.Automation.Provider.NavigationCmdletProvider