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
Ajoutez l’assembly System. Management. Automation en tant que référence à votre projet.
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).
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;
}
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour