Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här avsnittet är utgångspunkten för att lära dig hur du skapar en Windows PowerShell-provider. Den grundläggande provider som beskrivs här innehåller metoder för att starta och stoppa providern, och även om den här providern inte tillhandahåller ett sätt att komma åt ett datalager eller för att hämta eller ange data i datalagret, tillhandahåller den de grundläggande funktioner som krävs av alla leverantörer.
Som tidigare nämnts implementerar den grundläggande provider som beskrivs här metoder för att starta och stoppa providern. Windows PowerShell-körningen anropar dessa metoder för att initiera och eninitiera providern.
Anmärkning
Du hittar ett exempel på den här providern i filen AccessDBSampleProvider01.cs som tillhandahålls av Windows PowerShell.
Definiera Windows PowerShell-providerklassen
Det första steget när du skapar en Windows PowerShell-provider är att definiera dess .NET-klass. Den här grundläggande providern definierar en klass som heter AccessDBProvider som härleds från basklassen System.Management.Automation.Provider.CmdletProvider.
Vi rekommenderar att du placerar dina providerklasser i ett Providers namnområde för ditt API-namnområde, till exempel xxx.PowerShell.Providers. Den här providern använder namnområdet Microsoft.Samples.PowerShell.Provider, där alla Windows PowerShell-providerexempel körs.
Anmärkning
Klassen för en Windows PowerShell-provider måste uttryckligen markeras som offentlig. Klasser som inte är markerade som offentliga kommer som standard att vara interna och hittas inte av Windows PowerShell-körningen.
Här är klassdefinitionen för den här grundläggande providern:
[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : CmdletProvider
Precis före klassdefinitionen måste du deklarera attributet System.Management.Automation.Provider.CmdletProviderAttribute med syntaxen [CmdletProvider()].
Du kan ange attributnyckelord för att ytterligare deklarera klassen om det behövs. Observera att attributet System.Management.Automation.Provider.CmdletProviderAttribute som deklareras här innehåller två parametrar. Den första attributparametern anger det standardvänliga namnet för providern, som användaren kan ändra senare. Den andra parametern anger de Windows PowerShell-definierade funktioner som providern exponerar för Windows PowerShell-körningen under kommandobearbetningen. Möjliga värden för providerfunktionerna definieras av System.Management.Automation.Provider.ProviderCapabilities uppräkning. Eftersom det här är en basprovider stöder den inga funktioner.
Anmärkning
Det fullständigt kvalificerade namnet på Windows PowerShell-providern innehåller sammansättningsnamnet och andra attribut som bestäms av Windows PowerShell vid registrering av providern.
Definiera Provider-Specific tillståndsinformation
System.Management.Automation.Provider.CmdletProvider basklass och alla härledda klasser betraktas som tillståndslösa eftersom Windows PowerShell-körningen endast skapar providerinstanser efter behov. Om providern kräver fullständig kontroll och tillståndsunderhåll för providerspecifika data måste den därför härleda en klass från klassen System.Management.Automation.ProviderInfo. Din härledda klass bör definiera de medlemmar som krävs för att upprätthålla tillståndet så att providerspecifika data kan nås när Windows PowerShell-körningen anropar System.Management.Automation.Provider.CmdletProvider.Start*-metoden för att initiera providern.
En Windows PowerShell-provider kan också upprätthålla anslutningsbaserat tillstånd. Mer information om hur du underhåller anslutningstillstånd finns i Skapa en PowerShell-enhetsprovider.
Initiera providern
För att initiera providern anropar Windows PowerShell-körningen metoden System.Management.Automation.Provider.CmdletProvider.Start* när Windows PowerShell startas. För det mesta kan leverantören använda standardimplementeringen av den här metoden, som helt enkelt returnerar System.Management.Automation.ProviderInfo-objekt som beskriver providern. Om du vill lägga till ytterligare initieringsinformation bör du dock implementera din egen System.Management.Automation.Provider.CmdletProvider.Start* metod som returnerar en modifierad version av System.Management.Automation.ProviderInfo objekt som skickas till providern. I allmänhet bör den här metoden returnera det angivna System.Management.Automation.ProviderInfo objekt som skickats till den eller ett ändrat System.Management.Automation.ProviderInfo objekt som innehåller annan initieringsinformation.
Den här grundläggande providern åsidosätter inte den här metoden. Följande kod visar dock standardimplementeringen av den här metoden:
Providern kan underhålla tillståndet för providerspecifik information enligt beskrivningen i Definiera providerspecifikt datatillstånd. I det här fallet måste implementeringen åsidosätta System.Management.Automation.Provider.CmdletProvider.Start* metod för att returnera en instans av den härledda klassen.
Starta dynamiska parametrar
Providerimplementeringen av metoden System.Management.Automation.Provider.CmdletProvider.Start* kan kräva ytterligare parametrar. I det här fallet bör providern åsidosätta metoden System.Management.Automation.Provider.CmdletProvider.StartDynamicParameters* och returnera ett objekt som har egenskaper och fält med parsningsattribut som liknar en cmdlet-klass eller en System.Management.Automation.RuntimeDefinedParameterDictionary-objekt.
Den här grundläggande providern åsidosätter inte den här metoden. Följande kod visar dock standardimplementeringen av den här metoden:
Uninitialisera providern
Om du vill frigöra resurser som Windows PowerShell-providern använder bör leverantören implementera sin egen System.Management.Automation.Provider.CmdletProvider.Stop*-metoden. Den här metoden anropas av Windows PowerShell-körningen för att eninitiera providern i slutet av en session.
Den här grundläggande providern åsidosätter inte den här metoden. Följande kod visar dock standardimplementeringen av den här metoden:
Kodexempel
Fullständig exempelkod finns i AccessDbProviderSample01 Code Sample.
Testa Windows PowerShell-providern
När din Windows PowerShell-provider har registrerats med Windows PowerShell kan du testa den genom att köra de cmdletar som stöds på kommandoraden. För den här grundläggande providern kör du det nya gränssnittet och använder cmdleten Get-PSProvider för att hämta listan över leverantörer och se till att AccessDb-providern finns.
Get-PSProvider
Följande utdata visas:
Name Capabilities Drives
---- ------------ ------
AccessDb None {}
Alias ShouldProcess {Alias}
Environment ShouldProcess {Env}
FileSystem Filter, ShouldProcess {C, Z}
Function ShouldProcess {function}
Registry ShouldProcess {HKLM, HKCU}