Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
Ellenőrizd, hogy létezik-e a System.Management.Automation.PSDriveinfo.Root* tag, és hogy kapcsolat legyen az adattárolóval.
Hozz létre egy meghajtót, és töltsd fel a kapcsolati tagot a cmdlet támogatására
New-PSDrive.Validáld a System.Management.Automation.PSDriveinfo objektumot a javasolt meghajtóhoz.
Módosítsd a System.Management.Automation.PSDriveinfo objektumot, amely leírja a meghajtót minden szükséges teljesítmény- vagy megbízhatóságinformációval, vagy biztosíts további adatokat a meghajtót használó hívóknak is.
Kezeld a hibákat a System.Management.Automation.Provider.CmdletProvider.WriteError módszerrel, majd visszaadd
null.Ez a módszer vagy a medudushoz továbbított meghajtó információt, vagy egy szolgáltató-specifikus változatot adja vissza.
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.
Futtatjuk a
Get-PSProvidercmdlet-et, hogy lekérd a szolgáltatók listáját, hogy megbizonyosodjon az AccessDB meghajtó szolgáltató jelenlétéről:PS>
Get-PSProviderA 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}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át
C:\ps\northwind.mdb.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.mdbEllenő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 :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