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:

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.

  1. 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}
    
  2. İş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.

  3. Ö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
    
  4. 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         :
    
  5. 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

Windows PowerShell Sağlayıcınızı Tasarlama

Temel bir Windows PowerShell Sağlayıcısı Oluşturma