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.
Topik ini menjelaskan cara membuat penyedia drive Windows PowerShell yang menyediakan cara untuk mengakses penyimpanan data melalui drive Windows PowerShell. Jenis penyedia ini juga disebut sebagai penyedia drive Windows PowerShell. Drive Windows PowerShell yang digunakan oleh penyedia menyediakan sarana untuk menyambungkan ke penyimpanan data.
Penyedia drive Windows PowerShell yang dijelaskan di sini menyediakan akses ke database Microsoft Access. Untuk penyedia ini, drive Windows PowerShell mewakili database (dimungkinkan untuk menambahkan sejumlah drive ke penyedia drive), kontainer tingkat atas drive mewakili tabel dalam database, dan item kontainer mewakili baris dalam tabel.
Menentukan Kelas Penyedia Windows PowerShell
Penyedia drive Anda harus menentukan kelas .NET yang berasal dari kelas dasar System.Management.Automation.Provider.DriveCmdletProvider. Berikut adalah definisi kelas untuk penyedia drive ini:
[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : DriveCmdletProvider
Perhatikan bahwa dalam contoh ini, atribut System.Management.Automation.Provider.CmdletProviderAttribute menentukan nama yang mudah digunakan untuk penyedia dan kemampuan spesifik Windows PowerShell yang diekspos penyedia ke runtime Windows PowerShell selama pemrosesan perintah. Nilai yang mungkin untuk kemampuan penyedia ditentukan oleh System.Management.Automation.Provider.ProviderCapabilities enumerasi. Penyedia drive ini tidak mendukung salah satu kemampuan ini.
Menentukan Fungsionalitas Dasar
Seperti yang dijelaskan dalam Desain Penyedia Windows PowerShell Anda, kelas System.Management.Automation.Provider.DriveCmdletProvider berasal dari kelas System.Management.Automation.Provider.CmdletProvider yang menentukan metode yang diperlukan untuk menginisialisasi dan membatalkan inisialisasi penyedia. Untuk menerapkan fungsionalitas untuk menambahkan informasi inisialisasi khusus sesi dan untuk merilis sumber daya yang digunakan oleh penyedia, lihat Membuat Penyedia Windows PowerShell Dasar. Namun, sebagian besar penyedia (termasuk penyedia yang dijelaskan di sini) dapat menggunakan implementasi default fungsionalitas ini yang disediakan oleh Windows PowerShell.
Membuat Informasi Status Drive
Semua penyedia Windows PowerShell dianggap stateless, yang berarti bahwa penyedia drive Anda perlu membuat informasi status apa pun yang diperlukan oleh runtime Windows PowerShell saat memanggil penyedia Anda.
Untuk penyedia drive ini, informasi status menyertakan koneksi ke database yang disimpan sebagai bagian dari informasi drive. Berikut adalah kode yang memperlihatkan bagaimana informasi ini disimpan di objek System.Management.Automation.PSDriveinfo yang menjelaskan drive:
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
Membuat Drive
Untuk mengizinkan runtime Windows PowerShell membuat drive, penyedia drive harus menerapkan metode System.Management.Automation.Provider.DriveCmdletProvider.NewDrive*. Kode berikut menunjukkan implementasi metode System.Management.Automation.Provider.DriveCmdletProvider.NewDrive* untuk penyedia drive ini:
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
Penimpaan Anda atas metode ini harus melakukan hal berikut:
Verifikasi bahwa System.Management.Automation.PSDriveinfo.Root* anggota ada dan koneksi ke penyimpanan data dapat dibuat.
Buat drive dan isi anggota koneksi, untuk mendukung cmdlet
New-PSDrive
.Validasi objek System.Management.Automation.PSDriveinfo untuk drive yang diusulkan.
Ubah objek System.Management.Automation.PSDriveinfo yang menjelaskan drive dengan informasi performa atau keandalan yang diperlukan, atau berikan data tambahan untuk pemanggil menggunakan drive.
Tangani kegagalan menggunakan metode System.Management.Automation.Provider.CmdletProvider.WriteError lalu kembalikan
null
.Metode ini mengembalikan informasi drive yang diteruskan ke metode atau versi khusus penyedianya.
Melampirkan Parameter Dinamis ke NewDrive
Cmdlet New-PSDrive
yang didukung oleh penyedia drive Anda mungkin memerlukan parameter tambahan. Untuk melampirkan parameter dinamis ini ke cmdlet, penyedia menerapkan metode System.Management.Automation.Provider.DriveCmdletProvider.NewDriveDynamicParameters*. Metode ini mengembalikan objek yang memiliki properti dan bidang dengan atribut penguraian yang mirip dengan kelas cmdlet atau System.Management.Automation.RuntimeDefinedParameterDictionary objek.
Penyedia kandar ini tidak mengambil alih metode ini. Namun, kode berikut menunjukkan implementasi default metode ini:
Menghapus Drive
Untuk menutup koneksi database, penyedia drive harus menerapkan metode System.Management.Automation.Provider.DriveCmdletProvider.RemoveDrive*. Metode ini menutup koneksi ke drive setelah membersihkan informasi khusus penyedia.
Kode berikut menunjukkan implementasi metode System.Management.Automation.Provider.DriveCmdletProvider.RemoveDrive* untuk penyedia drive ini:
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
Jika drive dapat dihapus, metode harus mengembalikan informasi yang diteruskan ke metode melalui parameter drive
. Jika drive tidak dapat dihapus, metode harus menulis pengecualian dan kemudian mengembalikan null
. Jika penyedia Anda tidak mengambil alih metode ini, implementasi default metode ini hanya mengembalikan informasi drive yang diteruskan sebagai input.
Menginisialisasi Drive Default
Penyedia drive Anda menerapkan metode System.Management.Automation.Provider.DriveCmdletProvider.InitializeDefaultDrives* untuk memasang drive. Misalnya, penyedia Direktori Aktif mungkin memasang drive untuk konteks penamaan default jika komputer digabungkan ke domain.
Metode ini mengembalikan kumpulan informasi drive tentang drive yang diinisialisasi, atau koleksi kosong. Panggilan ke metode ini dilakukan setelah runtime Windows PowerShell memanggil metode System.Management.Automation.Provider.CmdletProvider.Start* untuk menginisialisasi penyedia.
Penyedia drive ini tidak mengambil alih metode System.Management.Automation.Provider.DriveCmdletProvider.InitializeDefaultDrives*. Namun, kode berikut menunjukkan implementasi default, yang mengembalikan koleksi drive kosong:
Hal-hal yang Perlu Diingat Tentang Mengimplementasikan InitializeDefaultDrives
Semua penyedia drive harus memasang drive akar untuk membantu pengguna dengan kemudahan ditemukan. Drive akar mungkin mencantumkan lokasi yang berfungsi sebagai akar untuk drive terpasang lainnya. Misalnya, penyedia Direktori Aktif mungkin membuat drive yang mencantumkan konteks penamaan yang ditemukan di atribut namingContext
pada Akar Lingkungan Sistem Terdistribusi (DSE). Ini membantu pengguna menemukan titik pemasangan untuk drive lain.
Sampel Kode
Untuk kode sampel lengkap, lihat Sampel Kode AccessDbProviderSample02.
Menguji Penyedia Drive Windows PowerShell
Ketika penyedia Windows PowerShell Anda telah terdaftar di Windows PowerShell, Anda dapat mengujinya dengan menjalankan cmdlet yang didukung pada baris perintah, termasuk cmdlet apa pun yang disediakan oleh derivasi. Mari kita uji penyedia drive sampel.
Jalankan cmdlet
Get-PSProvider
untuk mengambil daftar penyedia untuk memastikan bahwa penyedia drive AccessDB ada:PS>
Get-PSProvider
Output berikut muncul:
Name Capabilities Drives ---- ------------ ------ AccessDB None {} Alias ShouldProcess {Alias} Environment ShouldProcess {Env} FileSystem Filter, ShouldProcess {C, Z} Function ShouldProcess {function} Registry ShouldProcess {HKLM, HKCU}
Pastikan bahwa nama server database (DSN) ada untuk database dengan mengakses bagian Sumber Data dari Alat Administratif untuk sistem operasi. Dalam tabel DSN Pengguna, klik dua kali Database MS Access dan tambahkan jalur drive
C:\ps\northwind.mdb
.Buat drive baru menggunakan penyedia drive sampel:
New-PSDrive -Name mydb -Root C:\ps\northwind.mdb -PSProvider AccessDb`
Output berikut muncul:
Name Provider Root CurrentLocation ---- -------- ---- --------------- mydb AccessDB C:\ps\northwind.mdb
Validasi koneksi. Karena koneksi didefinisikan sebagai anggota drive, Anda dapat memeriksanya menggunakan cmdlet Get-PDDrive.
Nota
Pengguna belum dapat berinteraksi dengan penyedia sebagai drive, karena penyedia membutuhkan fungsionalitas kontainer untuk interaksi tersebut. Untuk informasi selengkapnya, lihat Membuat Penyedia Kontainer Windows PowerShell.
PS> (Get-PSDrive mydb). koneksi
Output berikut muncul:
ConnectionString : Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\ps\northwind.mdb ConnectionTimeout : 15 Database : C:\ps\northwind DataSource : ACCESS ServerVersion : 04.00.0000 Driver : odbcjt32.dll State : Open Site : Container :
Hapus drive dan keluar dari shell:
PS> Remove-PSDrive mydb PS> exit
Lihat Juga
Membuat Penyedia Windows PowerShell
Merancang Penyedia Windows PowerShell Anda
Membuat Penyedia Windows PowerShell Dasar