Windows PowerShell Sağlayıcısı Hızlı Başlangıç

bu konuda, yeni sürücü oluşturma temel işlevlerine sahip bir Windows PowerShell sağlayıcısı oluşturma işlemi açıklanmaktadır. sağlayıcılar hakkında genel bilgi için bkz. Windows PowerShell sağlayıcıya genel bakış. Daha kapsamlı işlevselliğe sahip sağlayıcı örnekleri için bkz. sağlayıcı örnekleri.

Temel sağlayıcı yazma

Windows PowerShell sağlayıcının en temel işlevleri, sürücü oluşturmak ve kaldırmak için kullanılır. Bu örnekte System . Management. Automation. Provider. Drvecmdletprovider. NewDrive * ve System. Management. Automation. Provider. Drvecmdletprovider. removedrive * yöntemlerini System. Management. Automation. Provider. drvecmdletprovider sınıfının uygulamamız. Ayrıca, bir sağlayıcı sınıfının nasıl bildirilemeyeceğini de göreceksiniz.

Bir sağlayıcı yazdığınızda, sağlayıcı kullanılabilir olduğunda otomatik olarak oluşturulan varsayılan sürücüler-Sürücüler belirtebilirsiniz. Ayrıca, bu sağlayıcıyı kullanan yeni sürücüler oluşturmak için bir yöntem tanımlayın.

bu konu başlığında belirtilen örnekler, bir Access veritabanını Windows PowerShell sürücüsü olarak temsil eden daha büyük bir örneğin bir parçası olan AccessDBProviderSample02 örneğine dayalıdır.

Projeyi ayarlama

Visual Studio ' de accessdbprovidersample adlı bir sınıf kitaplığı projesi oluşturun. projenizi Windows PowerShell başlatılacak şekilde yapılandırmak için aşağıdaki adımları uygulayın ve projenizi derleyip başlattığınızda sağlayıcı oturuma yüklenir.

Sağlayıcı projesini yapılandırma
  1. System. Management. Automation derlemesini projenize başvuru olarak ekleyin.

  2. hata ayıklama > Project > accessdbprovidersample özellikleri' ne tıklayın. projeyi başlat' da, dış program başlat' a tıklayın ve çalıştırılabilir Windows PowerShell git (genellikle c:\ Windows \system32\windowspowershell\v1.0 \ . powershell.exe).

  3. Başlangıç seçenekleri altında komut satırı bağımsız değişkenleri kutusuna aşağıdakini girin:-noexit -command "[reflection.assembly]::loadFrom(AccessDBProviderSample.dll' ) | import-module"

Sağlayıcı sınıfını bildirme

Sağlayıcımız System. Management. Automation. Provider. Drvecmdletprovider sınıfından türetiliyor. Gerçek işlevsellik sağlayan (öğelere erişme ve işleme, veri deposuna gitme ve öğelerin içeriğini ayarlama ve ayarlama) çoğu sağlayıcı System. Management. Automation. Provider. Navigationcmdletprovider sınıfından türetilir.

Sınıfının System. Management. Automation. Provider. Drvecmdletprovider'dan türediği belirtmenin yanı sıra, örnekte gösterildiği gibi System. Management. Automation. Provider. Cmdletproviderattribute ile tasarlamanız gerekir.

namespace Microsoft.Samples.PowerShell.Providers
{
  using System;
  using System.Data;
  using System.Data.Odbc;
  using System.IO;
  using System.Management.Automation;
  using System.Management.Automation.Provider;

  #region AccessDBProvider

  [CmdletProvider("AccessDB", ProviderCapabilities.None)]
  public class AccessDBProvider : DriveCmdletProvider
  {

}
}

NewDrive uygulama

System. Management. Automation. Provider. drvecmdletprovider. newdrive * yöntemi, bir kullanıcı sağlayıcınızın adını belirten Microsoft. PowerShell. Commands. newpsdrivekomut cmdlet 'ini çağırdığında Windows PowerShell altyapısı tarafından çağrılır. psdriveınfo parametresi Windows PowerShell altyapısı tarafından geçirilir ve yöntemi, yeni sürücüyü Windows PowerShell altyapısına döndürür. Bu yöntem, yukarıda oluşturulan sınıf içinde bildirilmelidir.

Yöntemi ilk olarak hem sürücü nesnesinin hem de geçirilen sürücü kökünün var olduğundan ve bunlardan biri yoksa döndürülmesinin mevcut olduğundan emin olup olmadığını denetler null . Daha sonra yeni bir sürücü oluşturmak için Accessdbpsdriveınfo iç sınıfının bir oluşturucusunu kullanır ve sürücünün temsil ettiği Access veritabanına bir bağlantı oluşturur.

protected override PSDriveInfo NewDrive(PSDriveInfo drive)
    {
      // Check if the drive object is null.
      if (drive == null)
      {
        WriteError(new ErrorRecord(
                   new ArgumentNullException("drive"),
                   "NullDrive",
                   ErrorCategory.InvalidArgument,
                   null));

        return null;
      }

      // Check if the drive root is not null or empty
      // and if it is 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;
    }

Aşağıdaki, yeni bir sürücü oluşturmak için kullanılan oluşturucuyu içeren Accessdbpsdriveınfo iç sınıfıdır ve sürücü için durum bilgilerini içerir.

internal class AccessDBPSDriveInfo : PSDriveInfo
  {
    /// <summary>
    /// A reference to the connection to the database.
    /// </summary>
    private OdbcConnection connection;

    /// <summary>
    /// Initializes a new instance of the AccessDBPSDriveInfo class.
    /// The constructor takes a single argument.
    /// </summary>
    /// <param name="driveInfo">Drive defined by this provider</param>
    public AccessDBPSDriveInfo(PSDriveInfo driveInfo)
           : base(driveInfo)
    {
    }

    /// <summary>
    /// Gets or sets the ODBC connection information.
    /// </summary>
    public OdbcConnection Connection
    {
        get { return this.connection; }
        set { this.connection = value; }
    }
  }

RemoveDrive uygulama

kullanıcı Microsoft. PowerShell. Commands. removepsdrivekomut cmdlet 'ini çağırdığında, System. Management. Automation. Provider. drvecmdletprovider. removedrive * yöntemi Windows PowerShell altyapısı tarafından çağrılır. Bu sağlayıcıdaki yöntemi, Access veritabanına olan bağlantıyı kapatır.

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 the ODBC connection to the drive.
      AccessDBPSDriveInfo accessDBPSDriveInfo = drive as AccessDBPSDriveInfo;

      if (accessDBPSDriveInfo == null)
      {
         return null;
      }

      accessDBPSDriveInfo.Connection.Close();

      return accessDBPSDriveInfo;
    }