Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Эта тема служит отправной точкой для изучения того, как создать провайдера PowerShell для Windows. Базовый провайдер, описанный здесь, предоставляет методы запуска и остановки провайдера, и хотя он не предоставляет средства доступа к хранилищу данных или получения или установки данных в хранилище, он предоставляет базовую функциональность, необходимую всем провайдерам.
Как уже упоминалось, базовый провайдер, описанный здесь, реализует методы запуска и прекращения работы провайдера. Среда выполнения 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.CmdletProviderAttribute с синтаксисом [CmdletProvider()].
При необходимости можно задать ключевые слова атрибутов для дополнительного объявления класса. Обратите внимание, что атрибут System.Management.Automation.Provider.Provider.CmdletProviderAttribute , объявленный здесь, включает два параметра. Параметр первого атрибута определяет имя, удобное для провайдера по умолчанию, которое пользователь может изменить позже. Второй параметр определяет возможности, определённые Windows PowerShell, которые провайдер открывает в процессе выполнения Windows PowerShell во время обработки команд. Возможные значения возможностей провайдера определяются перечислением System.Management.Automation.Provider.ProviderCapabilities . Поскольку это базовый провайдер, он не поддерживает никаких возможностей.
Замечание
Полностью квалифицированное название провайдера Windows PowerShell включает имя сборки и другие атрибуты, определяемые Windows PowerShell при регистрации провайдера.
Определение Provider-Specific информации о состоянии
Базовый класс System.Management.Automation.Provider.CmdletProvider и все производные классы считаются безсостоятельными, поскольку среда выполнения Windows PowerShell создаёт экземпляры провайдера только по мере необходимости. Поэтому, если вашему провайдеру требуется полное управление и поддержание состояния для специфических данных провайдера, он должен получить класс из класса System.Management.Automation.ProviderInfo . Ваш производный класс должен определить членов, необходимых для поддержания состояния, чтобы доступ к специфическим данным провайдера можно было получить при вызове в Windows PowerShell метод System.Management.Automation.Provider.CmdletProvider.Start* для инициализации провайдера.
Провайдер Windows PowerShell также может поддерживать состояние соединения. Для получения дополнительной информации о поддержании состояния соединения см. раздел «Создание поставщика диска PowerShell».
Инициализация провайдера
Для инициализации провайдера среда выполнения Windows PowerShell вызывает метод System.Management.Automation.Provider.CmdletProvider.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.CmdletProvider.Start* , чтобы вернуть экземпляр производного класса.
Запуск динамических параметров
Реализация метода System.Management.Automation.Provider.Provider.CmdletProvider.Start* может требовать дополнительных параметров. В этом случае провайдер должен переопределить метод System.Management.Automation.Provider.CmdletProvider.StartDynamicParameters* и вернуть объект с свойствами и полями с атрибутами разбора, похожими на класс cmdlet или объект System.Management.Automation.RuntimeDefinedParameterDictionary .
Этот базовый провайдер не отменяет этот метод. Однако следующий код показывает стандартную реализацию этого метода:
Снятие инициализации провайдера
Чтобы освободить ресурсы, используемые провайдером Windows PowerShell, ваш провайдер должен реализовать собственный метод System.Management.Automation.Provider.CmdletProvider.Stop* . Этот метод вызывается временем выполнения Windows PowerShell для удаления инициализации провайдера после окончания сессии.
Этот базовый провайдер не отменяет этот метод. Однако следующий код показывает стандартную реализацию этого метода:
Пример кода
Полный пример кода см. AccessDbProviderSample01 Code Sample01.
Тестирование провайдера Windows PowerShell
После регистрации вашего провайдера Windows PowerShell в Windows PowerShell вы можете проверить это, запустив поддерживаемые командные команды в командной строке. Для этого базового провайдера запустите новую оболочку и используйте Get-PSProvider cmdlet, чтобы получить список провайдеров и убедиться, что провайдер 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}