Windows PowerShell Sürücü Sağlayıcısı Oluşturma
Bu konuda, bir veri deposuna bir Windows PowerShell sürücü üzerinden erişmenin bir yolunu sağlayan bir Windows PowerShell açıklanmıştır. Bu sağlayıcı türü, sürücü sağlayıcıları için Windows PowerShell olarak da adlandırılır. Sağlayıcı Windows PowerShell sürücülerini kullanarak veri deposuna bağlanmanın bir anlamı vardır.
Burada Windows PowerShell sürücü sağlayıcısı microsoft Access veritabanına erişim sağlar. Bu sağlayıcı için Windows PowerShell sürücüsü veritabanını temsil eder (bir sürücü sağlayıcısına herhangi bir sayıda sürücü eklemek mümkündür), sürücünün üst düzey kapsayıcıları veritabanındaki tabloları temsil eder ve kapsayıcıların öğeleri tablolardaki satırları temsil eder.
Windows PowerShell Sağlayıcı Sınıfını Tanımlama
Sürücü sağlayıcınız, System.Management.Automation.Provider.Drivecmdletprovider temel sınıfından türeten bir .NET sınıfı tanımlamalı. Bu sürücü sağlayıcısı için sınıf tanımı şu şekildedir:
[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : DriveCmdletProvider
Bu örnekte, System.Management.Automation.Provider.Cmdletproviderattribute özniteliğinin sağlayıcı için kullanıcı dostu bir ad ve sağlayıcının komut işleme sırasında Windows PowerShell çalışma zamanının açık olduğu Windows PowerShell özellikleri belirtir. Sağlayıcı özellikleri için olası değerler System.Management.Automation.Provider.Provider.Providercapabilities numaralama tarafından tanımlanır. Bu sürücü sağlayıcısı bu özelliklerden herhangi birini desteklemez.
Temel İşlevselliği Tanımlama
Windows PowerShellSağlayıcınızı Tasarlama konusunda açıklandığı gibi, System.Management.Automation.Provider.Drivecmdletprovider sınıfı, sağlayıcıyı başlatma ve başlatmayı başlatma için gereken yöntemleri tanımlayan System.Management.Automation.Provider.Cmdletprovider temel sınıfından türetilebilir. Oturuma özgü başlatma bilgileri ekleme ve sağlayıcı tarafından kullanılan kaynakları serbest bırakma işlevlerini uygulamak için, bkz. Creating a Basic Windows PowerShell Provider. Ancak çoğu sağlayıcı (burada açıklanan sağlayıcı dahil) bu işlevin varsayılan uygulamasını kullanarak Windows PowerShell.
Sürücü Durumu Bilgileri Oluşturma
Tüm Windows PowerShell sağlayıcılar durum bilgisi olarak kabul edilir; bu da sürücü sağlayıcınızın sağlayıcınızı çağıran çalışma zamanının ihtiyaç Windows PowerShell durum bilgilerini oluşturması anlamına gelir.
Bu sürücü sağlayıcısı için durum bilgileri, sürücü bilgileri kapsamında tutulan veritabanı bağlantısını içerir. Aşağıda, bu bilgilerin sürücüyü açıklayan System.Management.Automation.PSDriveinfo nesnesinde nasıl depolandığı gösteren kod yer almaktadır:
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
Sürücü Oluşturma
Çalışma zamanının Windows PowerShell oluşturmasına izin vermek için, sürücü sağlayıcısı System.Management.Automation.Provider.Drivecmdletprovider.Newdrive* yöntemini uygulamalı. Aşağıdaki kod, bu sürücü sağlayıcısı için System.Management.Automation.Provider.Drivecmdletprovider.Newdrive* yönteminin uygulanmasını gösterir:
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
Bu yöntemi geçersiz kılmanız şunları gerçekleştirsin:
System.Management.Automation.PSDriveinfo.Root* üyesinin mevcut olduğunu ve veri deposuna bağlantının mümkün olduğunu doğrulayın.
cmdlet'ini desteklemek için bir sürücü oluşturun ve
New-PSDrive
bağlantı üyesini doldurmak.Önerilen sürücü için System.Management.Automation.PSDriveinfo nesnesini doğrulama.
Sürücüyü gerekli performans veya güvenilirlik bilgileriyle açıklayan System.Management.Automation.PSDriveinfo nesnesini değiştirme veya sürücüyü kullanan çağrıyı yapanlar için ek veriler sağlama.
System.Management.Automation.Provider.Cmdletprovider.WriteError yöntemini kullanarak hataları işle ve ardından yöntemini geri
null
dön.Bu yöntem, yöntemine geçirilen sürücü bilgilerini veya sağlayıcıya özgü bir sürümünü döndürür.
NewDrive'a Dinamik Parametreler Ekleme
Sürücü New-PSDrive
sağlayıcınız tarafından desteklenen cmdlet'i için ek parametreler gerekebilir. Sağlayıcı, bu dinamik parametreleri cmdlet'e eklemek için System.Management.Automation.Provider.Drivecmdletprovider.Newdrivedynamicparameters* yöntemini kullanır. Bu yöntem, cmdlet sınıfına veya System.Management.Automation.Runtimedefinedparameterdictionary nesnesine benzer öznitelikler ayrıştıran özelliklere ve alanlara sahip bir nesne döndürür.
Bu sürücü sağlayıcısı bu yöntemi geçersiz kılmaz. Ancak, aşağıdaki kod bu yöntemin varsayılan uygulamasını gösterir:
Sürücüyü Kaldırma
Veritabanı bağlantısını kapatmak için sürücü sağlayıcısının System.Management.Automation.Provider.Drivecmdletprovider.Removedrive* yöntemini uygulaması gerekir. Bu yöntem, sağlayıcıya özgü tüm bilgileri temizledikten sonra sürücü bağlantısını kapatır.
Aşağıdaki kod, bu sürücü sağlayıcısı için System.Management.Automation.Provider.Drivecmdletprovider.Removedrive* yönteminin uygulamasını gösterir:
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
Sürücü kaldırılabilirse yöntemi, parametresi aracılığıyla yöntemine geçirilen bilgileri geri drive
getirecektir. Sürücü kaldırılamazsa yöntemi bir özel durum yazmalı ve sonra null
dönüşletir. Sağlayıcınız bu yöntemi geçersiz kılmazsa, bu yöntemin varsayılan uygulaması yalnızca giriş olarak geçirilen sürücü bilgilerini döndürür.
Varsayılan Sürücüleri Başlatma
Sürücü sağlayıcınız sürücüleri bağlamak için System.Management.Automation.Provider.Drivecmdletprovider.Initializedefaultdrives* yöntemini kullanır. Örneğin, bilgisayar bir etki alanına katılmışsa, Active Directory sağlayıcısı varsayılan adlandırma bağlamı için bir sürücü bağlar.
Bu yöntem, başlatılan sürücülerle ilgili sürücü bilgileri koleksiyonunu veya boş bir koleksiyonu döndürür. Bu yönteme yapılan çağrı, Windows PowerShell çalışma zamanı sağlayıcıyı başlatmak için System.Management.Automation.Provider.Cmdletprovider.Start* yöntemini çağırarak yapılır.
Bu sürücü sağlayıcısı System.Management.Automation.Provider.Drivecmdletprovider.Initializedefaultdrives* yöntemini geçersiz kılmaz. Ancak, aşağıdaki kod boş bir sürücü koleksiyonu döndüren varsayılan uygulamasını gösterir:
InitializeDefaultDrives Uygulama Hakkında Anımsanacak Şeyler
Tüm sürücü sağlayıcıları, kullanıcıya keşfedebilirlik açısından yardımcı olmak için bir kök sürücü takmalı. Kök sürücü, diğer bağlı sürücüler için kök olarak hizmet eden konumları listeleyene kadar devam eder. Örneğin, Active Directory sağlayıcısı kök Dağıtılmış Sistem Ortamı 'nın (DSE) özniteliklerinde bulunan adlandırma bağlamlarını namingContext
listeleye bir sürücü oluşturabilir. Bu, kullanıcıların diğer sürücüler için bağlama noktalarını keşfetmelerini sağlar.
Kod Örneği
Tam örnek kod için bkz. AccessDbProviderSample02 Kod Örneği.
Windows PowerShell Sürücü Sağlayıcısını Test Etme
Windows PowerShell sağlayıcınız Windows PowerShell'a kaydedilene kadar, türetme tarafından kullanılabilir olan cmdlet'ler dahil olmak üzere desteklenen cmdlet'leri komut satırı üzerinde çalıştırarak bunu test edersiniz. Şimdi örnek sürücü sağlayıcısını test diyelim.
AccessDB sürücü sağlayıcısının mevcut olduğundan emin olmak için sağlayıcı listesini almak
Get-PSProvider
için cmdlet'ini çalıştırın:PS>
Get-PSProvider
Aşağıdaki çıkış görüntülenir:
Name Capabilities Drives ---- ------------ ------ AccessDB None {} Alias ShouldProcess {Alias} Environment ShouldProcess {Env} FileSystem Filter, ShouldProcess {C, Z} Function ShouldProcess {function} Registry ShouldProcess {HKLM, HKCU}
İşletim sistemi için Yönetimsel Araçlar'ın Veri Kaynakları bölümüne erişerek veritabanı için bir veritabanı sunucusu adının (DSN) mevcut olduğundan emin olun. User DSN tablosunda MS Access Database'e çift tıklayın ve sürücü yolunu
C:\ps\northwind.mdb
ekleyin.Örnek sürücü sağlayıcısını kullanarak yeni bir sürücü oluşturun:
new-psdrive -name mydb -root c:\ps\northwind.mdb -psprovider AccessDb`
Aşağıdaki çıkış görüntülenir:
Name Provider Root CurrentLocation ---- -------- ---- --------------- mydb AccessDB c:\ps\northwind.mdb
Bağlantıyı doğrulama. Bağlantı sürücünün bir üyesi olarak tanımlandığı için, bağlantının cmdlet'ini Get-PDDrive kontrol edin.
Not
Sağlayıcının bu etkileşim için kapsayıcı işlevselliğine ihtiyacı olduğu için kullanıcı henüz sağlayıcıyla sürücü olarak etkileşim kuramaz. Daha fazla bilgi için, bkz. Creating a Windows PowerShell Container Provider.
PS> (get-psdrive mydb).connection
Aşağıdaki çıkış görüntülenir:
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 :
Sürücüyü kaldırın ve kabuktan çıkın:
PS> remove-psdrive mydb PS> exit
Ayrıca Bkz.
Windows PowerShell Sağlayıcıları Oluşturma
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin