Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Dit onderwerp is het startpunt om te leren hoe je een Windows PowerShell-provider maakt. De hier beschreven basisprovider biedt methoden om de provider te starten en te stoppen, en hoewel deze provider geen manier biedt om toegang te krijgen tot een datawinkel of om de data in de datawinkel te verkrijgen of in te stellen, biedt hij wel de basisfunctionaliteit die door alle providers vereist is.
Zoals eerder vermeld, implementeert de hier beschreven basisprovider methoden om de provider te starten en te stoppen. De Windows PowerShell-runtime roept deze methoden aan om de provider te initialiseren en weer te deinitialiseren.
Opmerking
Je kunt een voorbeeld van deze provider vinden in het AccessDBSampleProvider01.cs-bestand dat door Windows PowerShell wordt geleverd.
Het definiëren van de Windows PowerShell Provider Class
De eerste stap bij het creëren van een Windows PowerShell-provider is het definiëren van de .NET-klasse ervan. Deze basisprovider definieert een klasse die wordt aangeroepen AccessDBProvider en die is afgeleid van de System.Management.Automation.Provider.CmdletProvider-basisklasse .
Het wordt aanbevolen om je providerklassen in een Providers naamruimte van je API-naamruimte te plaatsen, bijvoorbeeld xxx.PowerShell.Providers. Deze provider gebruikt de Microsoft.Samples.PowerShell.Provider naamruimte, waarin alle Windows PowerShell-providervoorbeelden draaien.
Opmerking
De klasse voor een Windows PowerShell-provider moet expliciet als publiek worden gemarkeerd. Klassen die niet als openbaar zijn gemarkeerd, worden standaard intern en worden niet gevonden door de Windows PowerShell-runtime.
Hier is de klasse-definitie voor deze basisprovider:
[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : CmdletProvider
Direct voor de klassedefinitie moet je het attribuut System.Management.Automation.Provider.CmdletProviderAttribute declareren, met de syntaxis [CmdletProvider()].
Je kunt attribuut-sleutelwoorden instellen om de klasse verder te declareren indien nodig. Let op dat het hier gedeclareerde attribuut System.Management.Automation.Provider.CmdletProviderAttribute twee parameters bevat. De eerste attribuutparameter specificeert de standaardvriendelijke naam van de provider, die de gebruiker later kan aanpassen. De tweede parameter specificeert de door Windows PowerShell gedefinieerde mogelijkheden die de provider tijdens de commandoverwerking aan de Windows PowerShell-runtime blootstelt. De mogelijke waarden voor de providercapaciteiten worden gedefinieerd door de System.Management.Automation.Provider.ProviderCapabilitiess-enumeratie . Omdat dit een basisprovider is, ondersteunt het geen mogelijkheden.
Opmerking
De volledig gekwalificeerde naam van de Windows PowerShell-provider bevat de assemblynaam en andere attributen die door Windows PowerShell worden bepaald bij registratie van de provider.
Definiëren Provider-Specific Toestandsinformatie
De basisklasse System.Management.Automation.Provider.CmdletProvider en alle afgeleide klassen worden als stateless beschouwd omdat de Windows PowerShell-runtime alleen provider-instanties aanmaakt wanneer nodig. Daarom moet uw provider, als volledige controle en state-onderhoud voor provider-specifieke data nodig heeft, een klasse afleiden van de System.Management.Automation.ProviderInfo-klasse . Je afgeleide klasse moet de leden definiëren die nodig zijn om de status te behouden, zodat de provider-specifieke data toegankelijk is wanneer de Windows PowerShell-runtime de System.Management.Automation.Provider.CmdletProvider.Start* -methode aanroept om de provider te initialiseren.
Een Windows PowerShell-provider kan ook de verbindingsgebaseerde status behouden. Voor meer informatie over het behouden van de verbindingsstatus, zie Een PowerShell Drive Provider aanmaken.
De Provider initialiseren
Om de provider te initialiseren, roept de Windows PowerShell-runtime de System.Management.Automation.Provider.CmdletProvider.Start* -methode aan wanneer Windows PowerShell wordt gestart. Voor het grootste deel kan je provider de standaardimplementatie van deze methode gebruiken, die simpelweg het System.Management.Automation.ProviderInfo-object teruggeeft dat jouw provider beschrijft. In het geval dat je echter extra initialisatie-informatie wilt toevoegen, moet je je eigen System.Management.Automation.Provider.CmdletProvider.Start*- methode implementeren die een aangepaste versie van het System.Management.Automation.ProviderInfo-object teruggeeft dat aan je provider wordt doorgegeven. In het algemeen zou deze methode het geleverde System.Management.Automation.ProviderInfo-object moeten teruggeven dat aan hem is doorgegeven, of een aangepast System.Management.Automation.ProviderInfo object dat andere initialisatie-informatie bevat.
Deze basisprovider overrult deze methode niet. De volgende code toont echter de standaardimplementatie van deze methode:
De aanbieder kan de status van provider-specifieke informatie behouden zoals beschreven in Defining Provider-specific Data State. In dit geval moet je implementatie de methode System.Management.Automation.Provider.CmdletProvider.Start* overschrijven om een instantie van de afgeleide klasse terug te geven.
Start dynamische parameters
De implementatie van de System.Management.Automation.Provider.CmdletProvider.Start*- methode in uw provider kan extra parameters vereisen. In dit geval moet de provider de methode System.Management.Automation.Automation.Provider.CmdletProvider.StartDynamicParameters* overschrijven en een object teruggeven met eigenschappen en velden met parsingattributen vergelijkbaar met een cmdlet-klasse of een System.Management.Automation.RuntimeDefinedParameterDictionary-object .
Deze basisprovider overrult deze methode niet. De volgende code toont echter de standaardimplementatie van deze methode:
Het ontinitialiseren van de provider
Om middelen vrij te maken die de Windows PowerShell-provider gebruikt, zou jouw provider zijn eigen System.Management.Automation.Provider.CmdletProvider.Stop* -methode moeten implementeren. Deze methode wordt door de Windows PowerShell-runtime aangeroepen om de provider aan het einde van een sessie te deinitialiseren.
Deze basisprovider overrult deze methode niet. De volgende code toont echter de standaardimplementatie van deze methode:
Codevoorbeeld
Voor volledige voorbeeldcode, zie AccessDbProviderSample01 Codevoorbeeld.
Het testen van de Windows PowerShell Provider
Zodra je Windows PowerShell-provider geregistreerd is bij Windows PowerShell, kun je deze testen door de ondersteunde cmdlets op de commandoregel uit te voeren. Voor deze basisprovider voer je de nieuwe shell uit en gebruik je de Get-PSProvider cmdlet om de lijst met providers op te halen en te zorgen dat de AccessDb-provider aanwezig is.
Get-PSProvider
De volgende uitvoer wordt weergegeven:
Name Capabilities Drives
---- ------------ ------
AccessDb None {}
Alias ShouldProcess {Alias}
Environment ShouldProcess {Env}
FileSystem Filter, ShouldProcess {C, Z}
Function ShouldProcess {function}
Registry ShouldProcess {HKLM, HKCU}