Megosztás a következőn keresztül:


Windows PowerShell meghajtó szolgáltató létrehozása

Ez a téma bemutatja, hogyan hozhatunk létre Windows PowerShell meghajtó szolgáltatót, amely lehetővé teszi az adattároló elérését egy Windows PowerShell meghajtón keresztül. Ezt a szolgáltatót Windows PowerShell meghajtó szolgáltatóknak is nevezik. A szolgáltató által használt Windows PowerShell meghajtók biztosítják az adattárolóhoz való csatlakozást.

Az itt leírt Windows PowerShell meghajtó szolgáltató hozzáférést biztosít egy Microsoft Access adatbázishoz. E szolgáltató esetében a Windows PowerShell meghajtó képviseli az adatbázist (bármilyen számú meghajtót lehet hozzáadni egy meghajtó szolgáltatóhoz), a meghajtó felső szintű konténerei az adatbázis tábláit, a konténerek elemei pedig a táblák sorait képviselik.

A Windows PowerShell szolgáltató osztály meghatározása

A meghajtó szolgáltatójának olyan .NET osztályt kell definiálnia, amely a System.Management.Automation.Provider.DriveCmdletProvider alaposztályból származik. Íme ennek a meghajtószolgáltatónak az osztálymeghatározása:

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

Figyeljük meg, hogy ebben a példában a System.Management.Automation.Provider.CmdletProviderAttribute attribútum felhasználóbarát nevet ad a szolgáltatónak, valamint azokat a Windows PowerShell-specifikus képességeket, amelyeket a szolgáltató a Windows PowerShell futtatásának a parancsfeldolgozás során biztosít. A szolgáltató képességeinek lehetséges értékeit a System.Management.Automation.Provider.Capabilities felsorolás határozza meg. Ez a meghajtó szolgáltató egyik ilyen képességeket sem támogatja.

Az alapfunkcionalitás meghatározása

Ahogy a Design Your Windows PowerShell Provider című részben leírva, a System.Management.Automation.Provider.DriveCmdletProvider osztály a System.Management.Automation.Provider.CmdletProvider alaposztályból származik, amely meghatározza a szolgáltató inicializálásához és visszatelepítéséhez szükséges módszereket. A munka-alkózásra specifikus inicializációs információk hozzáadására és a szolgáltató által használt erőforrások felszabadítására szolgáló funkciók megvalósításához lásd: Alap Windows PowerShell szolgáltató létrehozása. Azonban a legtöbb szolgáltató (beleértve az itt leírt szolgáltatót is) használhatja ennek a funkciónak a Windows PowerShell által biztosított alapértelmezett megvalósítását.

Meghajtóállapot-információ létrehozása

Minden Windows PowerShell szolgáltató állapot nélküli lesz, ami azt jelenti, hogy a meghajtó szolgáltatónak létre kell hoznia minden állapotinformációt, amelyre a Windows PowerShell futásideje szükséges, amikor a szolgáltatót hívja.

E meghajtó szolgáltató esetében az állapot információi közé tartozik az adatbázishoz való csatlakozás, amely a meghajtó információinak részeként kerül tárolásra. Íme a kód, amely megmutatja, hogyan tárolják ezt az információt a System.Management.Automation.PSDriveinfo objektumban, amely leírja a meghajtót:

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

Meghajtó létrehozása

Ahhoz, hogy a Windows PowerShell futóideje meghajtót hozzon létre, a meghajtó szolgáltatójának be kell valósítania a System.Management.Automation.Provider.DriveCmdletProvider.NewDrive* módszert. Az alábbi kód mutatja a System.Management.Automation.Provider.DriveCmdletProvider.NewDrive* módszer megvalósítását ezen meghajtószolgáltatón:

      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

Ennek a módszernek a felülbírálása a következőket kell, hogy elvégezze:

Dinamikus paraméterek csatolása a NewDrive-hoz

A New-PSDrive meghajtó által támogatott cmdlet-hez további paramétereket is szükség lehet. Ezeknek a dinamikus paramétereknek a cmdlethez való csatolásához a szolgáltató a System.Management.Automation.Provider.DriveCmdletProvider.NewDriveDynamicParameters* metódusát valósítja meg. Ez a módszer olyan objektumot ad vissza, amelynek tulajdonságai és mezői olyan elemző attribútumokkal rendelkeznek, amelyek hasonlóak egy cmdlet osztályhoz vagy a System.Management.Automation.RuntimedParameterDictionary objektumhoz.

Ez a meghajtó szolgáltató nem írja felül ezt a módszert. Azonban a következő kód mutatja ennek a módszernek az alapértelmezett megvalósítását:

Meghajtó eltávolítása

Az adatbázis-kapcsolat lezárásához a meghajtó szolgáltatónak a System.Management.Automation.Provider.DriveCmdletProvider.RemoveDrive* módszert kell végrehajtania. Ez a módszer a meghajtóhoz való csatlakozást zárja, miután minden szolgáltató-specifikus információt kitisztított.

Az alábbi kód bemutatja a System.Management.Automation.Provider.DriveCmdletProvider.RemoveDrive* módszer megvalósítását ezen meghajtószolgáltatón:

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

Ha a meghajtó eltávolítható, a metódusnak vissza kell adnia a paraméteren keresztül továbbított drive információt. Ha a meghajtót nem lehet eltávolítani, a metódusnak kivételt kell írnia, majd vissza nullkell adnia . Ha a szolgáltatód nem írja felül ezt a módszert, az alapértelmezett megvalósítás csak a meghajtó adatát adja vissza, mint bemenet.

Az alapértelmezett meghajtók inicializálása

A meghajtó szolgáltatója a System.Management.Automation.Provider.DriveCmdletProvider.InitializeDefaultDrives* módszert alkalmazza a meghajtók csatlakoztatásához. Például az Active Directory szolgáltató csatlakoztathat egy meghajtót az alapértelmezett névadási kontextushoz, ha a számítógép egy domainhez van csatlakoztatva.

Ez a módszer egy gyűjteményt ad vissza a meghajtók inicializált meghajtóiról, vagy egy üres gyűjteményt. A metódus hívása akkor történik, amikor a Windows PowerShell futási ideje a System.Management.Automation.Provider.CmdletProvider.Start* metóduszot hívja a szolgáltató inicializálásához.

Ez a meghajtó szolgáltató nem írja felül a System.Management.Automation.Provider.DriveCmdletProvider.InitializeDefaultDrives* metódust. Azonban a következő kód az alapértelmezett implementációt mutatja, amely üres meghajtógyűjteményt ad vissza:

Fontos dolgok, amiket érdemes megjegyezni az inicializeDefaultDrives megvalósításához

Minden meghajtó szolgáltatónak root meghajtót kell telepítenie, hogy segítse a felhasználót a felfedezhetőségben. A root meghajtó olyan helyeket is felsorolhat, amelyek más beépített meghajtók rootjaként szolgálnak. Például az Active Directory szolgáltató létrehozhat egy meghajtót, amely felsorolja a gyökér Distributed System Environment (DSE) namingContext attribútumaiban található elnevezési kontextusokat. Ez segít a felhasználóknak felfedezni a rögzítési pontokat más meghajtókhoz.

Kódminta

A teljes mintakódért lásd: AccessDbProviderSample02 Code Sample.

A Windows PowerShell meghajtó szolgáltatójának tesztelése

Amikor a Windows PowerShell szolgáltatód regisztrálva van a Windows PowerShell-nél, tesztelheted a támogatott cmdleteket a parancssoron, beleértve a származtatás által elérhető cmdleteket is. Teszteljük a mintameghajtó szolgáltatót.

  1. Futtatjuk a Get-PSProvider cmdlet-et, hogy lekérd a szolgáltatók listáját, hogy megbizonyosodjon az AccessDB meghajtó szolgáltató jelenlétéről:

    PS>Get-PSProvider

    A következő kimenet jelenik meg:

    Name                 Capabilities                  Drives
    ----                 ------------                  ------
    AccessDB             None                          {}
    Alias                ShouldProcess                 {Alias}
    Environment          ShouldProcess                 {Env}
    FileSystem           Filter, ShouldProcess         {C, Z}
    Function             ShouldProcess                 {function}
    Registry             ShouldProcess                 {HKLM, HKCU}
    
  2. Győződjön meg arról, hogy létezik adatbázis-szerver név (DSN) az operációs rendszer Adminisztratív EszközeinekAdatforrások részéhez. A User DSN táblában dupla kattintással az MS Access Database-re, és hozzáadja a meghajtó útvonalátC:\ps\northwind.mdb.

  3. Hozz létre új meghajtót a mintameghajtó szolgáltatójával:

    New-PSDrive -Name mydb -Root C:\ps\northwind.mdb -PSProvider AccessDb`
    

    A következő kimenet jelenik meg:

    Name     Provider     Root                   CurrentLocation
    ----     --------     ----                   ---------------
    mydb     AccessDB     C:\ps\northwind.mdb
    
  4. Ellenőrizd a kapcsolatot. Mivel a kapcsolat a meghajtó tagjaként van definiálva, ellenőrizheted a Get-PDDrive cmdlet-tel.

    Megjegyzés:

    A felhasználó még nem tud meghajtóként interakcióba lépni a szolgáltatóval, mivel a szolgáltatónak konténerfunkcióra van szüksége ehhez az interakcióhoz. További információért lásd : Windows PowerShell konténerszolgáltató létrehozása.

    Ui.:> (Get-PSDrive mydb). Kapcsolat

    A következő kimenet jelenik meg:

    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. Vedd ki a meghajtót és hagyd el a héjat:

    PS> Remove-PSDrive mydb
    PS> exit
    

Lásd még:

Windows PowerShell szolgáltatók létrehozása

Tervezd meg a Windows PowerShell szolgáltatódat

Alap Windows PowerShell szolgáltató létrehozása