Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten temat jest punktem wyjścia do nauki tworzenia dostawcy Windows PowerShell. Podstawowy dostawca opisany tutaj dostarcza metody uruchamiania i zatrzymywania dostawcy, i chociaż nie umożliwia dostępu do magazynu danych ani ich pozyskania lub ustawienia w magazynie, zapewnia podstawową funkcjonalność wymaganą przez wszystkich dostawców.
Jak wspomniano wcześniej, podstawowy dostawca opisany tutaj wdraża metody uruchamiania i zatrzymywania świadczenia. Środowisko uruchomieniowe Windows PowerShell wywołuje te metody w celu inicjalizacji i odinicjalizacji usługodawcy.
Uwaga / Notatka
Przykładowy model tego dostawcy znajdziesz w pliku AccessDBSampleProvider01.cs udostępnionym przez Windows PowerShell.
Definiowanie klasy dostawcy Windows PowerShell
Pierwszym krokiem przy tworzeniu dostawcy Windows PowerShell jest zdefiniowanie jego klasy .NET. Ten podstawowy dostawca definiuje klasę o nazwie AccessDBProvider pochodzącą z klasy podstawowej System.Management.Automation.Provider.CmdletProvider .
Zaleca się, aby klasy dostawców umieścić Providers w przestrzeni nazw przestrzeni nazw API, na przykład xxx.PowerShell.Providers. Ten dostawca korzysta z Microsoft.Samples.PowerShell.Provider przestrzeni nazw, w której działają wszystkie próbki dostawców Windows PowerShell.
Uwaga / Notatka
Klasa dostawcy Windows PowerShell musi być wyraźnie oznaczona jako publiczna. Klasy nieoznaczone jako publiczne będą domyślnie używane do wewnętrznych i nie zostaną wykryte przez środowisko wykonawcze Windows PowerShell.
Oto definicja klasy tego podstawowego dostawcy:
[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : CmdletProvider
Tuż przed definicją klasy musisz zadeklarować atrybut System.Management.Automation.Provider.CmdletProviderAttribute wraz ze składnią [CmdletProvider()].
Możesz ustawić słowa kluczowe atrybutów, aby dodatkowo deklarować klasę, jeśli zajdzie taka potrzeba. Zauważ, że atrybut System.Management.Automation.Provider.CmdletProviderAttribute zadeklarowany tutaj zawiera dwa parametry. Pierwszy parametr atrybutu określa domyślnie przyjazną nazwę dostawcy, którą użytkownik może później zmodyfikować. Drugi parametr określa możliwości definiowane przez Windows PowerShell, które dostawca udostępnia środowisku wykonawczym Windows PowerShell podczas przetwarzania poleceń. Możliwe wartości dla możliwości dostawcy są definiowane przez enumerację System.Management.Automation.Provider.ProviderCapabilities . Ponieważ jest to dostawca bazowy, nie obsługuje żadnych funkcji.
Uwaga / Notatka
W pełni kwalifikowana nazwa dostawcy Windows PowerShell obejmuje nazwę asemblera oraz inne atrybuty określone przez Windows PowerShell po rejestracji przez dostawcę.
Definiowanie informacji Provider-Specific stanów
Podstawowa klasa System.Management.Automation.Provider.CmdletProvider oraz wszystkie klasy pochodne są uznawane za bezstanowe, ponieważ środowisko uruchomieniowe Windows PowerShell tworzy instancje dostawców tylko wtedy, gdy jest to wymagane. Dlatego jeśli Twój dostawca wymaga pełnej kontroli i utrzymania stanu dla danych specyficznych dla dostawcy, musi wyprowadzić klasę z klasy System.Management.Automation.ProviderInfo . Twoja klasa pochodna powinna definiować członków niezbędnych do utrzymania stanu, aby dane specyficzne dla dostawcy mogły być dostępne, gdy środowisko uruchomieniowe Windows PowerShell wywołuje metodę System.Management.Automation.Provider.CmdletProvider.Start* do inicjalizacji dostawcy.
Dostawca Windows PowerShell może również utrzymywać stan oparty na połączeniach. Więcej informacji o utrzymaniu stanu połączenia można znaleźć w artykule Tworzenie dostawcy dysków PowerShell.
Inicjalizacja dostawcy
Aby inicjować dostawcę, środowisko uruchomieniowe Windows PowerShell wywołuje metodę System.Management.Automation.Provider.CmdletProvider.Start* podczas uruchamiania Windows PowerShell. W większości przypadków Twój dostawca może korzystać z domyślnej implementacji tej metody, która po prostu zwraca obiekt System.Management.Automation.ProviderInfo opisujący twojego dostawcę. Jednak jeśli chcesz dodać dodatkowe informacje inicjalizacyjne, powinieneś zaimplementować własną metodę System.Management.Automation.Provider.CmdletProvider.Start* , która zwraca zmodyfikowaną wersję obiektu System.Management.Automation.ProviderInfo przekazywanego do Twojego dostawcy. Ogólnie rzecz biorąc, ta metoda powinna zwracać dostarczony obiekt System.Management.Automation.ProviderInfo przekazany jej lub zmodyfikowany obiekt System.Management.Automation.ProviderInfo zawierający inne informacje inicjalizacyjne.
Ten podstawowy dostawca nie nadpisuje tej metody. Jednak poniższy kod pokazuje domyślną implementację tej metody:
Dostawca może utrzymywać stan informacji specyficznych dla dostawcy, jak opisano w Definiowaniu stanu danych specyficznego dla dostawcy. W takim przypadku implementacja musi nadpisać metodę System.Management.Automation.Provider.CmdletProvider.Start*, aby zwrócić instancję klasy pochodnej.
Startuj Parametry Dynamiczne
Implementacja metody System.Management.Automation.Provider.CmdletProvider.Start* może wymagać dodatkowych parametrów. W takim przypadku dostawca powinien nadpisać metodę System.Management.Automation.Provider.CmdletProvider.StartDynamicParameters* i zwrócić obiekt o właściwościach i polach z atrybutami parsowania podobnymi do klasy cmdlet lub obiektu System.Management.Automation.RuntimeDefinedParameterDictionary .
Ten podstawowy dostawca nie nadpisuje tej metody. Jednak poniższy kod pokazuje domyślną implementację tej metody:
Odłączenie dostawcy
Aby uwolnić zasoby używane przez dostawcę Windows PowerShell, Twój dostawca powinien zaimplementować własną metodę System.Management.Automation.Provider.CmdletProvider.Stop* . Ta metoda jest wywoływana przez środowisko wykonawcze Windows PowerShell, aby odinicjalizować dostawcę po zakończeniu sesji.
Ten podstawowy dostawca nie nadpisuje tej metody. Jednak poniższy kod pokazuje domyślną implementację tej metody:
Przykładowy kod
Pełny przykładowy kod można znaleźć w AccessDbProviderSample01 Code Sample.
Testowanie dostawcy Windows PowerShell
Gdy Twój dostawca Windows PowerShell zostanie zarejestrowany w Windows PowerShell, możesz go przetestować, uruchamiając obsługiwane cmdlets w wierszu poleceń. Dla tego podstawowego dostawcy uruchom nową powłokę i użyj Get-PSProvider cmdletu, aby pobrać listę dostawców i upewnić się, że dostawca AccessDb jest obecny.
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}