Fournisseur Windows PowerShell - Démarrage rapide

cette rubrique explique comment créer un fournisseur Windows PowerShell qui dispose des fonctionnalités de base de la création d’un nouveau lecteur. pour obtenir des informations générales sur les fournisseurs, consultez vue d’ensemble du fournisseur Windows PowerShell. Pour obtenir des exemples de fournisseurs avec une fonctionnalité plus complète, consultez exemplesde fournisseurs.

Écriture d’un fournisseur de base

la fonctionnalité la plus basique d’un fournisseur de Windows PowerShell consiste à créer et à supprimer des lecteurs. Dans cet exemple, nous implémentons les méthodes System. Management. Automation. Provider. Drivecmdletprovider. les * et System. Management. Automation. Provider. Drivecmdletprovider. Removedrive * de la classe System. Management. Automation. Provider. Drivecmdletprovider . Vous verrez également comment déclarer une classe de fournisseur.

Lorsque vous écrivez un fournisseur, vous pouvez spécifier les lecteurs de lecteurs par défaut qui sont créés automatiquement lorsque le fournisseur est disponible. Vous définissez également une méthode pour créer de nouveaux lecteurs qui utilisent ce fournisseur.

les exemples fournis dans cette rubrique sont basés sur l’exemple AccessDBProviderSample02 , qui fait partie d’un exemple plus complet qui représente une base de données Access comme un lecteur Windows PowerShell.

Configuration du projet

dans Visual Studio, créez un projet de bibliothèque de classes nommé AccessDBProviderSample. effectuez les étapes suivantes pour configurer votre projet afin que Windows PowerShell démarre, et le fournisseur sera chargé dans la session, lorsque vous générerez et démarrerez votre projet.

Configurer le projet de fournisseur
  1. Ajoutez l’assembly System. Management. Automation en tant que référence à votre projet.

  2. cliquez sur Project > propriétés AccessDBProviderSample > débogage. dans démarrer le projet, cliquez sur démarrer le programme externe, puis accédez au Windows PowerShell exécutable (généralement c:\ Windows \System32\WindowsPowerShell\v1.0 \ . powershell.exe).

  3. Sous options de démarrage, entrez ce qui suit dans la zone arguments de ligne de commande : -noexit -command "[reflection.assembly]::loadFrom(AccessDBProviderSample.dll' ) | import-module"

Déclaration de la classe de fournisseur

Notre fournisseur est dérivé de la classe System. Management. Automation. Provider. Drivecmdletprovider . La plupart des fournisseurs qui fournissent des fonctionnalités réelles (accès et manipulation d’éléments, navigation dans le magasin de données et obtention et définition du contenu d’éléments) dérivent de la classe System. Management. Automation. Provider. Navigationcmdletprovider .

En plus de spécifier que la classe dérive de System. Management. Automation. Provider. Drivecmdletprovider, vous devez la décorer avec System. Management. Automation. Provider. Cmdletproviderattribute , comme indiqué dans l’exemple.

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
  {

}
}

Implémentation de les

la méthode System. Management. Automation. Provider. Drivecmdletprovider. les * est appelée par le moteur Windows PowerShell lorsqu’un utilisateur appelle l’applet de commande Microsoft. PowerShell. commands. NewPSDriveCommand en spécifiant le nom de votre fournisseur. le paramètre PSDriveInfo est passé par le moteur de Windows PowerShell, et la méthode retourne le nouveau lecteur au moteur d’Windows PowerShell. Cette méthode doit être déclarée dans la classe créée ci-dessus.

La méthode commence par vérifier que l’objet lecteur et la racine du lecteur qui ont été transmis existent, en retournant null si ce n’est pas le cas. Il utilise ensuite un constructeur de la classe interne AccessDBPSDriveInfo pour créer un nouveau lecteur et une connexion à la base de données Access que le lecteur représente.

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;
    }

Voici la classe interne AccessDBPSDriveInfo qui inclut le constructeur utilisé pour créer un nouveau lecteur et contient les informations d’État du lecteur.

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; }
    }
  }

Implémentation de RemoveDrive

la méthode System. Management. Automation. Provider. Drivecmdletprovider. Removedrive * est appelée par le moteur Windows PowerShell lorsqu’un utilisateur appelle l’applet de commande Microsoft. PowerShell. commands. RemovePSDriveCommand . La méthode de ce fournisseur ferme la connexion à la base de données Access.

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;
    }