Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Sampel ini memperlihatkan cara menimpa metode System.Management.Automation.Provider.DriveCmdletProvider.NewDrive* dan System.Management.Automation.Provider.DriveCmdletProvider.RemoveDrive* untuk mendukung panggilan ke cmdlet New-PSDrive dan Remove-PSDrive. Kelas penyedia dalam sampel ini berasal dari kelas System.Management.Automation.Provider.DriveCmdletProvider.
Menunjukkan
Penting
Kelas penyedia Anda kemungkinan besar akan berasal dari salah satu kelas berikut dan mungkin mengimplementasikan antarmuka penyedia lain:
- kelas System.Management.Automation.Provider.ItemCmdletProvider. Lihat AccessDBProviderSample03.
- kelas System.Management.Automation.Provider.ContainerCmdletProvider. Lihat AccessDBProviderSample04.
- Kelas System.Management.Automation.Provider.NavigationCmdletProvider. Lihat AccessDBProviderSample05.
Untuk informasi selengkapnya tentang memilih kelas penyedia mana yang akan diperoleh berdasarkan fitur penyedia, lihat Merancang Penyedia Windows PowerShell Anda.
Sampel ini menunjukkan hal berikut:
Mendeklarasikan atribut
CmdletProvider.Menentukan kelas penyedia yang didorong dari kelas System.Management.Automation.Provider.DriveCmdletProvider.
Menimpa metode System.Management.Automation.Provider.DriveCmdletProvider.NewDrive* untuk mendukung pembuatan drive baru. (Sampel ini tidak menunjukkan cara menambahkan parameter dinamis ke cmdlet
New-PSDrive.)Menimpa metode System.Management.Automation.Provider.DriveCmdletProvider.RemoveDrive* untuk mendukung penghapusan drive yang ada.
Contoh
Sampel ini memperlihatkan cara menimpa System.Management.Automation.Provider.DriveCmdletProvider.NewDrive* dan System.Management.Automation.Provider.DriveCmdletProvider.RemoveDrive* metode. Untuk penyedia sampel ini, ketika drive dibuat, informasi koneksinya disimpan dalam objek AccessDBPsDriveInfo.
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
}
Lihat Juga
System.Management.Automation.Provider.ItemCmdletProvider
System.Management.Automation.Provider.ContainerCmdletProvider
System.Management.Automation.Provider.NavigationCmdletProvider
Merancang Penyedia Windows PowerShell Anda