Tworzenie podstawowego dostawcy programu Windows PowerShell

Ten temat jest punktem wyjścia do nauki tworzenia dostawcy Windows PowerShell usługi. Podstawowy dostawca opisany w tym miejscu udostępnia metody uruchamiania i zatrzymywania dostawcy i chociaż ten dostawca nie zapewnia metody uzyskiwania dostępu do magazynu danych ani uzyskiwania lub ustawienia danych w magazynie danych, zapewnia podstawowe funkcje wymagane przez wszystkich dostawców.

Jak wspomniano wcześniej, podstawowy dostawca opisany tutaj implementuje metody uruchamiania i zatrzymywania dostawcy. Środowisko Windows PowerShell wywołuje te metody, aby zainicjować i niezainicjować dostawcę.

Uwaga

Przykład tego dostawcy można znaleźć w pliku AccessDBSampleProvider01.cs dostarczonym przez Windows PowerShell.

Definiowanie Windows PowerShell dostawcy

Pierwszym krokiem tworzenia dostawcy Windows PowerShell jest zdefiniowanie jego klasy .NET. Ten podstawowy dostawca definiuje klasę o nazwie pochodzącą od klasy bazowej AccessDBProvider System.Management.Automation.Provider.Cmdletprovider.

Zalecane jest, aby umieścić klasy dostawców w przestrzeni nazw twojej przestrzeni nazw interfejsu API, na przykład Providers xxx.PowerShell.Providers. Ten dostawca używa przestrzeni nazw, w której Microsoft.Samples.PowerShell.Provider są uruchamiane Windows PowerShell przykłady dostawcy.

Uwaga

Klasa dostawcy Windows PowerShell musi być jawnie oznaczona jako publiczna. Klasy, które nie są oznaczone jako publiczne, zostaną domyślnie oznaczone jako wewnętrzne i nie zostaną odnalezione przez Windows PowerShell uruchomieniowe.

Oto definicja klasy dla tego podstawowego dostawcy:

[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : CmdletProvider

Bezpośrednio przed definicją klasy należy zadeklarować atrybut System.Management.Automation.Provider.Cmdletproviderattribute przy użyciu składni [CmdletProvider()].

Możesz ustawić słowa kluczowe atrybutu, aby dodatkowo zadeklarować klasę w razie potrzeby. Zwróć uwagę, że zadeklarowany tutaj atrybut System.Management.Automation.Provider.Cmdletproviderattribute zawiera dwa parametry. Pierwszy parametr atrybutu określa domyślną przyjazną nazwę dostawcy, którą użytkownik może zmodyfikować później. Drugi parametr określa zdefiniowane Windows PowerShell, które dostawca uwidacznia w środowisku uruchomieniowym Windows PowerShell podczas przetwarzania poleceń. Możliwe wartości dla możliwości dostawcy są definiowane przez wyliczenie System.Management.Automation.Provider.Providercapabilities. Ponieważ jest to dostawca podstawowy, nie obsługuje żadnych możliwości.

Uwaga

W pełni kwalifikowana nazwa dostawcy Windows PowerShell zawiera nazwę zestawu i inne atrybuty określone przez Windows PowerShell podczas rejestracji dostawcy.

Definiowanie Provider-Specific stanu

Klasa bazowa System.Management.Automation.Provider.Cmdletprovider i wszystkie klasy pochodne są traktowane jako bez stanowe, ponieważ środowisko uruchomieniowe Windows PowerShell tworzy wystąpienia dostawcy tylko zgodnie z wymaganiami. W związku z tym jeśli dostawca wymaga pełnej kontroli i konserwacji stanu dla danych specyficznych dla dostawcy, musi wyprowadzać klasę z klasy System.Management.Automation.Providerinfo. Klasa pochodna powinna definiować składowe niezbędne do utrzymania stanu, aby można było uzyskać dostęp do danych specyficznych dla dostawcy, gdy środowisko uruchomieniowe usługi Windows PowerShell wywoła metodę System.Management.Automation.Provider.Cmdletprovider.Start*, aby zainicjować dostawcę.

Dostawca Windows PowerShell może również zachować stan oparty na połączeniu. Aby uzyskać więcej informacji o utrzymywaniu stanu połączenia, zobacz Tworzenie dostawcy dysków programu PowerShell.

Inicjowanie dostawcy

Aby zainicjować dostawcę, środowisko uruchomieniowe Windows PowerShell wywołuje metodę System.Management.Automation.Provider.Cmdletprovider.Start* po Windows PowerShell uruchomieniu. W większości przypadków dostawca może używać domyślnej implementacji tej metody, która po prostu zwraca obiekt System.Management.Automation.Providerinfo opisujący dostawcę. Jednak w przypadku, gdy chcesz dodać dodatkowe informacje o inicjowaniu, należy zaimplementować własną metodę System.Management.Automation.Provider.Cmdletprovider.Start*, która zwraca zmodyfikowaną wersję obiektu System.Management.Automation.Providerinfo przekazywaną do dostawcy. Ogólnie rzecz biorąc, ta metoda powinna zwrócić podany obiekt System.Management.Automation.Providerinfo przekazany do niego lub zmodyfikowany obiekt System.Management.Automation.Providerinfo zawierający inne informacje inicjalizacji.

Ten podstawowy dostawca nie zastępuje tej metody. Jednak poniższy kod przedstawia domyślną implementację tej metody:

Dostawca może zachować stan informacji specyficznych dla dostawcy zgodnie z opisem w tece Definiowanie stanu danych specyficznego dla dostawcy. W takim przypadku implementacja musi zastąpić metodę System.Management.Automation.Provider.Cmdletprovider.Start*, aby zwrócić wystąpienie klasy pochodnej.

Uruchamianie parametrów dynamicznych

Implementacja dostawcy metody System.Management.Automation.Provider.Cmdletprovider.Start* może wymagać dodatkowych parametrów. W takim przypadku dostawca powinien zastąpić metodę System.Management.Automation.Provider.Cmdletprovider.Startdynamicparameters* i zwrócić obiekt, który ma właściwości i pola z atrybutami analizowania podobnymi do klasy polecenia cmdlet lub obiektu System.Management.Automation.Runtimedefinedparameterdictionary.

Ten podstawowy dostawca nie zastępuje tej metody. Jednak poniższy kod przedstawia domyślną implementację tej metody:

Niezainicjowanie dostawcy

Aby uwolnić zasoby używane przez Windows PowerShell, dostawca powinien zaimplementować własną metodę System.Management.Automation.Provider.Cmdletprovider.Stop*. Ta metoda jest wywoływana przez środowisko Windows PowerShell, aby niezainicjować dostawcę po zamknięciu sesji.

Ten podstawowy dostawca nie zastępuje tej metody. Jednak poniższy kod przedstawia domyślną implementację tej metody:

Przykład kodu

Aby uzyskać kompletny przykładowy kod, zobacz AccessDbProviderSample01 Code Sample (Przykładowy kod AccessDbProviderSample01).

Testowanie dostawcy Windows PowerShell danych

Po zarejestrowaniu Windows PowerShell usługi Windows PowerShell można go przetestować, uruchamiając obsługiwane polecenia cmdlet w wierszu polecenia. W przypadku tego podstawowego dostawcy uruchom nową powłokę i użyj polecenia cmdlet , aby pobrać listę dostawców i upewnić się, że jest obecny Get-PSProvider dostawca accessdb.

Get-PSProvider

Wyświetlane są następujące dane wyjściowe:

Name                 Capabilities                  Drives
----                 ------------                  ------
AccessDb             None                          {}
Alias                ShouldProcess                 {Alias}
Environment          ShouldProcess                 {Env}
FileSystem           Filter, ShouldProcess         {C, Z}
Function             ShouldProcess                 {function}
Registry             ShouldProcess                 {HKLM, HKCU}

Zobacz też

Tworzenie Windows PowerShell dostawców

Projektowanie dostawcy programu Windows PowerShell