Поделиться через


Создание базового поставщика Windows PowerShell

Этот раздел является отправной точкой для обучения созданию поставщика Windows PowerShell. Базовый поставщик, описанный здесь, предоставляет методы запуска и остановки поставщика, и хотя этот поставщик не предоставляет средства для доступа к хранилищу данных или получения или установки данных в хранилище данных, он предоставляет основные функциональные возможности, необходимые всем поставщикам.

Как упоминалось ранее, базовый поставщик, описанный здесь, реализует методы запуска и остановки поставщика. Среда выполнения Windows PowerShell вызывает эти методы для инициализации и неинициализации поставщика.

Примечание.

Пример этого поставщика можно найти в файле AccessDBSampleProvider01.cs, предоставленном Windows PowerShell.

Определение класса поставщика Windows PowerShell

Первым шагом при создании поставщика Windows PowerShell является определение своего класса .NET. Этот базовый поставщик определяет класс с именем AccessDBProvider, производный от базового класса System.Management.Automation.Provider.CmdletProvider.

Рекомендуется поместить классы поставщиков в пространство имен Providers пространства имен API, например xxx.PowerShell.Providers. Этот поставщик использует пространство имен Microsoft.Samples.PowerShell.Provider, в котором выполняются все примеры поставщиков Windows PowerShell.

Примечание.

Класс для поставщика Windows PowerShell должен быть явно помечен как общедоступный. Классы, не помеченные как общедоступные, по умолчанию будут находиться во внутренней среде выполнения Windows PowerShell.

Ниже приведено определение класса для этого базового поставщика:

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

Перед определением класса необходимо объявить атрибут System.Management.Automation.Provider.КомандлетProviderAttribute с синтаксисом [КомандлетProvider()].

При необходимости можно задать ключевые слова атрибутов для дальнейшего объявления класса. Обратите внимание, что атрибут System.Management.Automation.Provider.КомандлетProviderAttribute, объявленный здесь, включает два параметра. Первый параметр атрибута задает понятное по умолчанию имя поставщика, которое пользователь может изменить позже. Второй параметр указывает определяемые поставщиком возможности Windows PowerShell во время обработки команд. Возможные значения возможностей поставщика определяются перечислением System.Management.Automation.Provider.ProviderCapabilities. Так как это базовый поставщик, он не поддерживает возможности.

Примечание.

Полное имя поставщика Windows PowerShell включает имя сборки и другие атрибуты, определенные Windows PowerShell при регистрации поставщика.

Определение сведений о состоянии Provider-Specific

Базовый класс System.Management.Automation.Provider.КомандлетProvider и все производные классы считаются бессерверными, так как среда выполнения Windows PowerShell создает экземпляры поставщиков только по мере необходимости. Таким образом, если поставщику требуется полный контроль и обслуживание состояния для данных конкретного поставщика, он должен быть производным от класса System.Management.Automation.ProviderInfo. Производный класс должен определить члены, необходимые для поддержания состояния, чтобы доступ к данным для конкретного поставщика можно было получить, когда среда выполнения Windows PowerShell вызывает метод System.Management.Automation.Provider.КомандлетProvider.Start* для инициализации поставщика.

Поставщик Windows PowerShell также может поддерживать состояние на основе подключения. Дополнительные сведения о сохранении состояния подключения см. в созданиипоставщика дисков PowerShell.

Инициализация поставщика

Чтобы инициализировать поставщика, среда выполнения Windows PowerShell вызывает метод System.Management.Automation.Provider.КомандлетProvider.Start* при запуске Windows PowerShell. В большинстве случаев поставщик может использовать реализацию этого метода по умолчанию, которая просто возвращает объект System.Management.Automation.ProviderInfo, описывающий поставщика. Однако при добавлении дополнительных сведений о инициализации следует реализовать собственный метод System.Management.Automation.Provider.CmdletProvider.Start*, который возвращает измененную версию объекта System.Management.Automation.ProviderInfo, передаваемого поставщику. Как правило, этот метод должен возвращать предоставленный объект System.Management.Automation.ProviderInfo, переданный ему, или измененный объект system.Management.Automation.ProviderInfo, содержащий другие сведения об инициализации.

Этот базовый поставщик не переопределяет этот метод. Однако в следующем коде показана реализация этого метода по умолчанию:

Поставщик может поддерживать состояние сведений, относящихся к поставщику, как описано в определении состояния данных для конкретного поставщика. В этом случае реализация должна переопределить метод System.Management.Automation.Provider.КомандлетProvider.Start*, чтобы вернуть экземпляр производного класса.

Запуск динамических параметров

Реализация поставщика метода System.Management.Automation.Provider.КомандлетProvider.Start* может потребовать дополнительных параметров. В этом случае поставщик должен переопределить метод System.Management.Automation.Provider.КомандлетProvider.StartDynamicParameters* и вернуть объект с свойствами и полями с синтаксическим атрибутами, похожими на класс командлета или объект System.Management.Automation.RuntimeDefinedParameterDictionary.

Этот базовый поставщик не переопределяет этот метод. Однако в следующем коде показана реализация этого метода по умолчанию:

Неинициализация поставщика

Чтобы освободить ресурсы, используемые поставщиком Windows PowerShell, поставщик должен реализовать собственный метод System.Management.Automation.Provider.КомандлетProvider.Stop*. Этот метод вызывается средой выполнения Windows PowerShell для неинициализации поставщика при закрытии сеанса.

Этот базовый поставщик не переопределяет этот метод. Однако в следующем коде показана реализация этого метода по умолчанию:

Пример кода

Полный пример кода см. в примере кода AccessDbProviderSample01.

Тестирование поставщика Windows PowerShell

После регистрации поставщика Windows PowerShell в Windows PowerShell его можно протестировать, выполнив поддерживаемые командлеты в командной строке. Для этого базового поставщика запустите новую оболочку и используйте командлет Get-PSProvider, чтобы получить список поставщиков и убедиться, что поставщик AccessDb присутствует.

Get-PSProvider

Отображаются следующие выходные данные:

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

См. также

создание поставщиков Windows PowerShell

проектирование поставщика Windows PowerShell