Windows PowerShelles meghajtószolgáltató létrehozása
Ez a témakör azt ismerteti, hogyan hozhat létre Windows PowerShell-szolgáltatót, amely lehetővé teszi egy adattár eléréséhez egy Windows PowerShell meghajtón keresztül. Ezt a szolgáltatótípust más néven meghajtószolgáltatóknak Windows PowerShell nevezzük. A Windows PowerShell által használt adatmeghajtók biztosítják az adattárhoz való csatlakozáshoz szükséges eszközöket.
Az Windows PowerShell ismertetett meghajtószolgáltató hozzáférést biztosít egy Microsoft Access-adatbázishoz. Ezen szolgáltató esetében a Windows PowerShell-meghajtó képviseli az adatbázist (bármilyen számú meghajtót hozzáadhat egy meghajtószolgáltatóhoz), a meghajtó legfelső szintű tárolói az adatbázisban lévő táblákat, a tárolók elemei pedig a táblák sorait jelölik.
A Windows PowerShell definiálása
A meghajtószolgáltatónak meg kell határoznia egy .NET-osztályt, amely a System.Management.Automation.Provider.Drivecmdletprovider alaposztályból származik. Itt található a meghajtószolgáltató osztálydefiníciója:
[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : DriveCmdletProvider
Figyelje meg, hogy ebben a példában a System.Management.Automation.Provider.Cmdletproviderattribute attribútum egy felhasználóbarát nevet ad meg a szolgáltatónak, valamint a Windows PowerShell-specifikus képességeket, amelyek a szolgáltató által a Windows PowerShell-runtime számára a parancs feldolgozása során elérhetővé Windows PowerShell számára. A szolgáltatói képességek lehetséges értékeit a System.Management.Automation.Provider.Providercapabilities enumerálás határozza meg. Ez a meghajtószolgáltató nem támogatja ezeket a képességeket.
Alapfunkciók meghatározása
A Design Your Windows PowerShell Provider(A Windows PowerShell-szolgáltató tervezése) szakaszban leírtak szerint a System.Management.Automation.Provider.Drivecmdletprovider osztály a szolgáltató inicializálásához és inicializálásához szükséges metódusokat meghatározó System.Management.Automation.Provider.Cmdletprovider alaposztályból származik. A munkamenet-specifikus inicializálási információk hozzáadására és a szolgáltató által használt erőforrások felszabadítási funkcióinak megvalósításához lásd: Alapszintű Windows PowerShell Provider létrehozása. A legtöbb szolgáltató (beleértve az itt leírt szolgáltatót is) használhatja a jelen funkció alapértelmezett implementációját, amelyet a Windows PowerShell.
Meghajtóállapot-információk létrehozása
Minden Windows PowerShell szolgáltató állapot nélkülinek minősül, ami azt jelenti, hogy a meghajtószolgáltatónak létre kell hoznia minden olyan állapotinformációt, amelyre a Windows PowerShell-futtatásnak szüksége van, amikor a szolgáltatót hívja meg.
Ennek a meghajtószolgáltatónak az állapotinformációi tartalmazzák a meghajtó információinak részeként megtartó adatbázissal való kapcsolatot. Az itt látható kód bemutatja, hogyan tárolja a rendszer ezeket az információkat a meghajtót leíró System.Management.Automation.PSDriveinfo objektumban:
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-runtime létrehozzon egy meghajtót, a meghajtószolgáltatónak implementálja a System.Management.Automation.Provider.Drivecmdletprovider.Newdrive* metódust. A következő kód a System.Management.Automation.Provider.Drivecmdletprovider.Newdrive* metódus megvalósítását mutatja be ehhez a meghajtószolgáltatóhoz:
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 metódusnak a felülbírálása a következőt kell, hogy tegye:
Ellenőrizze, hogy létezik-e a System.Management.Automation.PSDriveinfo.Root* tag, és hogy létesíthet-e kapcsolatot az adattáraval.
Hozzon létre egy meghajtót, és töltse fel a kapcsolati tagot a
New-PSDrive
parancsmag támogatásához.Ellenőrizze a javasolt meghajtó System.Management.Automation.PSDriveinfo objektumát.
Módosítsa a System.Management.Automation.PSDriveinfo objektumot, amely leírja a meghajtót a szükséges teljesítmény- vagy megbízhatósági információkkal, vagy adjon meg további adatokat a meghajtót használó hívók számára.
Kezelje a hibákat a System.Management.Automation.Provider.Cmdletprovider.WriteError metódussal, majd adja vissza a következőt:
null
.Ez a metódus vagy a metódusnak átadott meghajtóinformációkat, vagy annak szolgáltatóspecifikus verzióját adja vissza.
Dinamikus paraméterek csatolása a NewDrive-hoz
Előfordulhat, hogy a meghajtószolgáltató által támogatott New-PSDrive
parancsmaghoz további paraméterekre van szükség. Ahhoz, hogy ezeket a dinamikus paramétereket a parancsmaghoz csatolja, a szolgáltató a System.Management.Automation.Provider.Drivecmdletprovider.Newdrivedynamicparameters* metódust implementálja. Ez a metódus olyan objektumot ad vissza, amely olyan tulajdonságokkal és mezőkkel rendelkezik, amelyek a parancsmagosztályhoz vagy a System.Management.Automation.Runtimedefinedparameterdictionary objektumhoz hasonló elemzési attribútumokkal rendelkeznek.
Ez a meghajtószolgáltató nem bírálja felül ezt a metódust. A következő kód azonban ennek a metódusnak az alapértelmezett implementációját mutatja be:
Meghajtó eltávolítása
Az adatbázis-kapcsolat megszakadása érdekében a meghajtószolgáltatónak implementálja a System.Management.Automation.Provider.Drivecmdletprovider.Removedrive* metódust. Ez a metódus bezárja a kapcsolatot a meghajtóval a szolgáltatóra vonatkozó információk tisztítása után.
Az alábbi kód a System.Management.Automation.Provider.Drivecmdletprovider.Removedrive* metódus megvalósítását mutatja be ehhez a meghajtószolgáltatóhoz:
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 a paraméteren keresztül a metódusnak átadott információkat kell drive
visszaadni. Ha a meghajtó nem távolítható el, a metódusnak kivételt kell írnia, majd a következőt kell visszaadni: null
. Ha a szolgáltató nem bírálja felül ezt a metódust, a metódus alapértelmezett implementációja csak a bemenetként átadott meghajtóinformációt adja vissza.
Alapértelmezett meghajtók inicializálása
A meghajtószolgáltató implementálja a System.Management.Automation.Provider.Drivecmdletprovider.Initializedefaultdrives* metódust a meghajtók csatlakoztatásához. Például a Active Directory csatlakoztathat egy meghajtót az alapértelmezett elnevezési környezethez, ha a számítógép tartományhoz csatlakozik.
Ez a metódus az inicializált meghajtókra vonatkozó meghajtóinformációk gyűjteményét, vagy egy üres gyűjteményt ad vissza. A metódus hívása azután történt, hogy a Windows PowerShell-runtime a System.Management.Automation.Provider.Cmdletprovider.Start* metódust hívja meg a szolgáltató inicializálásához.
Ez a meghajtószolgáltató nem bírálja felül a System.Management.Automation.Provider.Drivecmdletprovider.Initializedefaultdrives* metódust. A következő kódban azonban az alapértelmezett megvalósítás látható, amely egy üres meghajtógyűjteményt ad vissza:
Az InitializeDefaultDrives megvalósításával kapcsolatos dolgok
Minden meghajtószolgáltatónak csatlakoztatnia kell egy gyökér szintű meghajtót, hogy segítsen a felhasználónak a felderíthetőségben. A gyökérmeghajtó felsorolhatja azokat a helyeket, amelyek más csatlakoztatott meghajtók gyökereiként szolgálnak. Például a Active Directory szolgáltató létrehozhat egy meghajtót, amely felsorolja a gyökér elosztottrendszer-környezet (DSE) attribútumaiban található elnevezési namingContext
környezeteket. Ez segít a felhasználóknak a más meghajtók csatlakoztatási pontjainak felderítésében.
Kódminta
A teljes mintakódért lásd: AccessDbProviderSample02 – Kódminta.
A Windows PowerShell meghajtószolgáltató tesztelése
Ha a Windows PowerShell-szolgáltató regisztrálva van az Windows PowerShell-ben, tesztelheti a támogatott parancsmagok parancssorban való futtatásával, beleértve az származtatás által elérhetővé tett parancsmagokat is. Teszteljük a minta meghajtószolgáltatót.
Futtassa a parancsmagot a szolgáltatók listájának lekérése érdekében, hogy az
Get-PSProvider
AccessDB meghajtószolgáltató jelen legyen:PS>
Get-PSProvider
Az alábbi 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-kiszolgálónév (DSN) az adatbázishoz az operációs rendszer felügyeleti eszközeinek Adatforrások részéhez való hozzáféréssel. A User DSN táblában kattintson duplán az MS Access Database elemre, és adja hozzá a meghajtó elérési
C:\ps\northwind.mdb
útját.Hozzon létre egy új meghajtót a minta meghajtószolgáltató használatával:
new-psdrive -name mydb -root c:\ps\northwind.mdb -psprovider AccessDb`
Az alábbi kimenet jelenik meg:
Name Provider Root CurrentLocation ---- -------- ---- --------------- mydb AccessDB c:\ps\northwind.mdb
Ellenőrizze a kapcsolatot. Mivel a kapcsolat a meghajtó tagjaként van definiálva, az Get-PDDrive parancsmag használatával ellenőrizheti.
Megjegyzés
A felhasználó még nem kommunikálhat meghajtóként a szolgáltatóval, mivel a szolgáltatónak tárolófunkcióra van szüksége az adott interakcióhoz. További információ: Creating a Windows PowerShell Container Provider (Tárolószolgáltató létrehozása).
PS> (get-psdrive mydb).connection
Az alábbi 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 :
Távolítsa el a meghajtót, és lépjen ki a rendszerhéjból:
PS> remove-psdrive mydb PS> exit
Lásd még:
Új Windows PowerShell létrehozása
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: