Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Toto téma je výchozím bodem pro naučení se, jak vytvořit poskytovatele Windows PowerShell. Základní poskytovatel popsaný zde poskytuje metody pro spuštění a zastavení poskytovatele, a přestože tento poskytovatel neposkytuje způsob, jak přistupovat k datovému úložišti nebo je získat či nastavit, poskytuje základní funkce, které jsou vyžadovány všemi poskytovateli.
Jak již bylo zmíněno, základní poskytovatel popsaný zde zavádí metody pro spuštění a ukončení poskytovatele. Runtime Windows PowerShell volá tyto metody k inicializaci a odinicializaci poskytovatele.
Poznámka:
Ukázku tohoto poskytovatele najdete v souboru AccessDBSampleProvider01.cs poskytnutém Windows PowerShell.
Definování třídy poskytovatele Windows PowerShell
Prvním krokem při vytváření poskytovatele Windows PowerShell je definování jeho třídy .NET. Tento základní poskytovatel definuje třídu nazvanou AccessDBProvider , která pochází ze základní třídy System.Management.Automation.Provider.CmdletProvider .
Doporučuje se umístit své třídy poskytovatele do Providers jmenného prostoru vašeho API prostoru, například xxx.PowerShell.Providers. Tento poskytovatel používá Microsoft.Samples.PowerShell.Provider jmenný prostor, ve kterém běží všechny ukázky poskytovatelů Windows PowerShell.
Poznámka:
Třída pro poskytovatele Windows PowerShell musí být explicitně označena jako veřejná. Třídy, které nejsou označeny jako veřejné, budou ve výchozím nastavení interní a nejsou nalezeny v běhu Windows PowerShell.
Zde je definice třídy tohoto základního poskytovatele:
[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : CmdletProvider
Těsně před definicí třídy musíte deklarovat atribut System.Management.Automation.Provider.CmdletProviderAttribute se syntaxí [CmdletProvider()].
Můžete nastavit klíčová slova atributů, která v případě potřeby dále deklarují třídu. Všimněte si, že atribut System.Management.Automation.Provider.CmdletProviderAttribute deklarovaný zde obsahuje dva parametry. První parametr atributu určuje výchozí přívětivý název poskytovatele, který může uživatel později upravit. Druhý parametr specifikuje schopnosti definované Windows PowerShellem, které poskytovatel zpřístupňuje běhu Windows PowerShell během zpracování příkazů. Možné hodnoty pro schopnosti poskytovatele jsou definovány výčtem System.Management.Automation.Provider.ProviderCapabilities . Protože se jedná o základního poskytovatele, nepodporuje žádné schopnosti.
Poznámka:
Plně kvalifikovaný název poskytovatele Windows PowerShell zahrnuje název assembleru a další atributy určené Windows PowerShell při registraci poskytovatele.
Definování Provider-Specific informace o stavu
Základní třída System.Management.Automation.Provider.CmdletProvider a všechny odvozené třídy jsou považovány za bezstavové, protože runtime Windows PowerShell vytváří instance poskytovatelů pouze podle potřeby. Pokud tedy váš poskytovatel vyžaduje plnou kontrolu a údržbu stavu pro data specifická pro poskytovatele, musí odvodit třídu z třídy System.Management.Automation.ProviderInfo . Vaše odvozená třída by měla definovat členy potřebné k udržení stavu, aby bylo možné přistupovat k datům specifickým pro poskytovatele, když runtime Windows PowerShell vyvolá metodu System.Management.Automation.Provider.CmdletProvider.Start* k inicializaci poskytovatele.
Poskytovatel Windows PowerShell může také udržovat stav založený na spojení. Pro více informací o udržování stavu připojení viz Vytvoření poskytovatele PowerShell disku.
Inicializace poskytovatele
Pro inicializaci poskytovatele volá runtime Windows PowerShell metodu System.Management.Automation.Provider.CmdletProvider.Start* při spuštění Windows PowerShell. Většinou může váš poskytovatel použít výchozí implementaci této metody, která jednoduše vrátí objekt System.Management.Automation.ProviderInfo , který popisuje vašeho poskytovatele. Pokud však chcete přidat další inicializační informace, měli byste implementovat vlastní metodu System.Management.Automation.Provider.CmdletProvider.Start* , která vrátí upravenou verzi objektu System.Management.Automation.ProviderInfo , který je předán vašemu poskytovateli. Obecně by tato metoda měla vrátit poskytnutý objekt System.Management.Automation.ProviderInfo , který jí byl předán, nebo upravený objekt System.Management.Automation.ProviderInfo , který obsahuje další inicializační informace.
Tento základní poskytovatel tuto metodu nepřepisuje. Následující kód však ukazuje výchozí implementaci této metody:
Poskytovatel může udržovat stav informací specifických pro poskytovatele, jak je popsáno v části Definování datového stavu specifického pro poskytovatele. V takovém případě musí vaše implementace přepsat metodu System.Management.Automation.Provider.CmdletProvider.Start*, aby vrátila instanci odvozené třídy.
Spustit dynamické parametry
Implementace metody System.Management.Automation.Provider.CmdletProvider.Start* může vyžadovat další parametry. V tomto případě by měl poskytovatel přepsat metodu System.Management.Automation.Provider.CmdletProvider.StartDynamicParameters* a vrátit objekt, který má vlastnosti a pole s atributy pro analýzu podobnými třídě cmdlet nebo objektu System.Management.Automation.RuntimeDefinedParameterDictionary .
Tento základní poskytovatel tuto metodu nepřepisuje. Následující kód však ukazuje výchozí implementaci této metody:
Zrušení inicializace poskytovatele
Pro uvolnění zdrojů, které poskytovatel Windows PowerShell používá, měl by implementovat vlastní metodu System.Management.Automation.Provider.CmdletProvider.Stop* . Tato metoda je vyvolána runtime Windows PowerShell k odinicializaci poskytovatele na konci relace.
Tento základní poskytovatel tuto metodu nepřepisuje. Následující kód však ukazuje výchozí implementaci této metody:
Ukázka kódu
Pro kompletní ukázkový kód viz AccessDbProviderSample01 Code Sample.
Testování Windows PowerShell Provider
Jakmile je váš poskytovatel Windows PowerShell zaregistrován ve Windows PowerShell, můžete ho otestovat spuštěním podporovaných cmdlets v příkazovém řádku. Pro tohoto základního poskytovatele spusťte nový shell a pomocí Get-PSProvider cmdletu získáte seznam poskytovatelů a zajistíte, že je AccessDb přítomen.
Get-PSProvider
Objeví se následující výstup:
Name Capabilities Drives
---- ------------ ------
AccessDb None {}
Alias ShouldProcess {Alias}
Environment ShouldProcess {Env}
FileSystem Filter, ShouldProcess {C, Z}
Function ShouldProcess {function}
Registry ShouldProcess {HKLM, HKCU}