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 terhubung 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.
Mendefinisikan 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 khusus Windows PowerShell yang diekspos penyedia ke runtime Windows PowerShell selama pemrosesan perintah. Nilai yang mungkin untuk kemampuan penyedia ditentukan oleh enumerasi System.Management.Automation.Provider.ProviderCapabilities. Penyedia drive ini tidak mendukung salah satu dari kemampuan ini.
Mendefinisikan Fungsionalitas Dasar
Seperti yang dijelaskan dalam Rancang Penyedia Windows PowerShell Anda, kelas System.Management.Automation.Provider.DriveCmdletProvider berasal dari kelas dasar 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 melepaskan 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 mencakup koneksi ke database yang disimpan sebagai bagian dari informasi drive. Berikut adalah kode yang menunjukkan bagaimana informasi ini disimpan dalam 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 mengimplementasikan 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
Penggantian metode ini harus melakukan hal berikut:
Verifikasi bahwa anggota System.Management.Automation.PSDriveinfo.Root* ada dan koneksi ke penyimpanan data dapat dibuat.
Buat drive dan isi anggota koneksi, untuk mendukung
New-PSDrivecmdlet.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 penelepon yang 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 penyedia.
Melampirkan Parameter Dinamis ke NewDrive
Cmdlet yang New-PSDrive didukung oleh penyedia drive Anda mungkin memerlukan parameter tambahan. Untuk melampirkan parameter dinamis ini ke cmdlet, penyedia mengimplementasikan 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 objek System.Management.Automation.RuntimeDefinedParameterDictionary .
Penyedia drive ini tidak mengganti metode ini. Namun, kode berikut menunjukkan implementasi default dari 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 drive parameter. Jika drive tidak dapat dihapus, metode harus menulis pengecualian dan kemudian mengembalikan null. Jika penyedia Anda tidak mengganti metode ini, implementasi default metode ini hanya mengembalikan informasi drive yang diteruskan sebagai input.
Menginisialisasi Drive Default
Penyedia drive Anda mengimplementasikan metode System.Management.Automation.Provider.DriveCmdletProvider.InitializeDefaultDrives* untuk memasang drive. Misalnya, penyedia Active Directory 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 mengganti metode System.Management.Automation.Provider.DriveCmdletProvider.InitializeDefaultDrives*. Namun, kode berikut menunjukkan implementasi default, yang mengembalikan koleksi drive kosong:
Hal-hal yang Perlu Diingat Tentang Menerapkan InitializeDefaultDrives
Semua penyedia drive harus memasang root drive untuk membantu pengguna dengan kemampuan penemuan. Drive root mungkin mencantumkan lokasi yang berfungsi sebagai root untuk drive terpasang lainnya. Misalnya, penyedia Active Directory mungkin membuat drive yang mencantumkan konteks penamaan yang ditemukan dalam namingContext atribut pada Lingkungan Sistem Terdistribusi (DSE) root. 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 dengan Windows PowerShell, Anda dapat mengujinya dengan menjalankan cmdlet yang didukung pada baris perintah, termasuk cmdlet apa pun yang tersedia melalui derivasi. Mari kita uji penyedia drive sampel.
Jalankan
Get-PSProvidercmdlet untuk mengambil daftar penyedia untuk memastikan bahwa penyedia drive AccessDB ada:PS>
Get-PSProviderOutput 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. Di tabel DSN Pengguna , klik dua kali MS Access Database dan tambahkan jalur
C:\ps\northwind.mdbdrive .Membuat 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.mdbValidasi 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 memerlukan fungsionalitas kontainer untuk interaksi tersebut. Untuk informasi selengkapnya, lihat Membuat Penyedia Kontainer Windows PowerShell.
PS> (Get-PSDrive mydb). Sambungan
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 :Lepaskan drive dan keluar dari cangkang:
PS> Remove-PSDrive mydb PS> exit
Lihat Juga
Membuat Penyedia Windows PowerShell