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


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

Вы должны реализовать поставщик Windows PowerShell, если ваш продукт или конфигурация предоставляет набор сохраненных данных, например базу данных, которую пользователь хочет перейти или просмотреть. Кроме того, если продукт предоставляет контейнер, даже если он не является многоуровневым контейнером, то имеет смысл реализовать поставщик Windows PowerShell. Например, может потребоваться реализовать поставщик контейнеров Windows PowerShell, если команда командлета Copy, Move, Rename, New или Remove имеет смысл как операция с данными продукта или конфигурации.

Пути Windows PowerShell идентифицируют поставщика

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

Дополнительные сведения о путях Windows PowerShell см. в статье о работе Windows PowerShell.

Определение пути Drive-Qualified

Чтобы разрешить пользователю получать доступ к данным, расположенным на физическом диске, поставщик Windows PowerShell должен поддерживать путь к диску. Этот путь начинается с имени диска, за которым следует двоеточие (:) например, mydrive:\abc\bar).

Определение пути Provider-Qualified

Чтобы среда выполнения Windows PowerShell инициализировать и неинициализировать поставщика, поставщик Windows PowerShell должен поддерживать путь к поставщику. Например, FileSystem::\\uncshare\abc\bar — это путь к поставщику файловой системы, предоставленному Windows PowerShell.

Определение пути Provider-Direct

Чтобы разрешить удаленный доступ к поставщику Windows PowerShell, он должен поддерживать прямой путь поставщика для передачи непосредственно поставщику Windows PowerShell для текущего расположения. Например, поставщик Windows PowerShell реестра может использовать \\server\regkeypath в качестве пути прямого поставщика.

Определение пути Provider-Internal

Чтобы разрешить командлету поставщика получать доступ к данным с помощью интерфейсов программирования приложений, отличных от Windows PowerShell, поставщик Windows PowerShell должен поддерживать внутренний путь поставщика. Этот путь указывается после ":"" в пути, заданном поставщиком. Например, внутренний путь поставщика для поставщика Файловой системы Windows PowerShell — \\uncshare\abc\bar.

Изменение сохраненных данных

При переопределении методов, изменяющих базовое хранилище данных, всегда вызывайте метод System.Management.Automation.Provider.CmdletProvider.WriteItemObject* с самой up-to-date версией элемента, измененной этим методом. Инфраструктура поставщика определяет, должен ли объект элемента передаваться в конвейер, например, когда пользователь задает параметр -PassThru. Если получить наиболее up-to-date элемент является дорогостоящей операцией (производительностью), можно проверить свойство Context.PassThru, чтобы определить, нужно ли на самом деле написать полученный элемент.

Выбор базового класса для поставщика

Windows PowerShell предоставляет ряд базовых классов, которые можно использовать для реализации собственного поставщика Windows PowerShell. При разработке поставщика выберите базовый класс, описанный в этом разделе, который наиболее подходит для ваших требований.

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

С помощью состояния сеанса среда выполнения Windows PowerShell делает несколько командлетов расположения доступными для определенных поставщиков Windows PowerShell, таких как Get-Location, Set-Location, Pop-Locationи командлеты Push-Location. Командлет Get-Help можно использовать для получения сведений об этих командлетах расположения.

Базовый класс КомандлетаProvider

Класс System.Management.Automation.Provider.КомандлетProvider определяет базовый поставщик Windows PowerShell. Этот класс поддерживает объявление поставщика и предоставляет ряд свойств и методов, доступных всем поставщикам Windows PowerShell. Класс вызывается командлетом Get-PSProvider для перечисления всех доступных поставщиков сеанса. Реализация этого командлета предоставляется состоянием сеанса.

Примечание.

Поставщики Windows PowerShell доступны для всех областей языка Windows PowerShell.

Базовый класс DriveCmdletProvider

Класс System.Management.Automation.Provider.DriveCmdletProvider определяет поставщик дисков Windows PowerShell, который поддерживает операции по добавлению новых дисков, удалению существующих дисков и инициализации дисков по умолчанию. Например, поставщик Файловой системы, предоставляемый Windows PowerShell, инициализирует диски для всех подключенных томов, таких как жесткие диски и dvd-диски.

Этот класс является производным от базового класса System.Management.Automation.Provider.КомандлетProvider. В следующей таблице перечислены командлеты, предоставляемые этим классом. Помимо перечисленных, командлет Get-PSDrive (предоставляемый состоянием сеанса) — это связанный командлет, используемый для получения доступных дисков.

cmdlet Определение
New-PSDrive Создает новый диск для сеанса и передает сведения о диске.
Remove-PSDrive Удаляет диск из сеанса.

Базовый класс ItemCmdletProvider

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

cmdlet Определение
Clear-Item Очищает текущее содержимое элементов в указанном расположении и заменяет его значением clear, указанным поставщиком. Этот командлет не передает выходной объект через конвейер, если его PassThru параметр не указан.
Get-Item Извлекает элементы из указанного расположения и передает результирующий объект.
Invoke-Item Вызывает действие по умолчанию для элемента по указанному пути.
Set-Item Задает элемент в указанном расположении с указанным значением. Этот командлет не передает выходной объект через конвейер, если его PassThru параметр не указан.
Resolve-Path Разрешает подстановочные знаки для пути Windows PowerShell и передает сведения о пути.
Test-Path Проверяет указанный путь и возвращает true, если он существует и false в противном случае. Этот командлет реализован для поддержки параметра IsContainer для метода System.Management.Automation.Provider.КомандлетProvider.WriteItemObject*.

Базовый класс ContainerCmdletProvider

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

Этот класс является производным от базового класса System.Management.Automation.Provider.ItemCmdletProvider. В следующей таблице определены командлеты, реализованные этим классом.

cmdlet Определение
Copy-Item Копирует элементы из одного расположения в другое. Этот командлет не передает выходной объект через конвейер, если его PassThru параметр не указан.
Get-ChildItem Извлекает дочерние элементы в указанном расположении и передает их в виде объектов.
New-Item Создает новые элементы в указанном расположении и передает результирующий объект.
Remove-Item Удаляет элементы из указанного расположения.
Rename-Item Переименовывает элемент в указанном расположении. Этот командлет не передает выходной объект через конвейер, если его PassThru параметр не указан.

Класс System.Management.Automation.Provider.NavigationCmdletProvider определяет поставщик навигации Windows PowerShell, который выполняет операции для элементов, использующих несколько контейнеров. Этот класс является производным от базового класса System.Management.Automation.Provider.ContainerCmdletProvider. В следующей таблице перечислены командлеты, предоставляемые этим классом.

cmdlet Определение
Combine-Path Объединяет два пути в один путь, используя разделитель для конкретного поставщика между путями. Этот командлет передает строки.
Move-Item Перемещает элементы в указанное расположение. Этот командлет не передает выходной объект через конвейер, если его PassThru параметр не указан.

Связанный командлет — это базовый командлет Parse-Path, предоставляемый Windows PowerShell. Этот командлет можно использовать для анализа пути Windows PowerShell для поддержки параметра Parent. Он передает строку родительского пути.

Выбор интерфейсов поставщика для поддержки

Помимо производных от одного из базовых классов Windows PowerShell, поставщик Windows PowerShell может поддерживать другие функции, производные от одного или нескольких следующих интерфейсов поставщика. В этом разделе определяются эти интерфейсы и командлеты, поддерживаемые каждым из них. Он не описывает параметры для командлетов, поддерживаемых интерфейсом. Сведения о параметрах командлета доступны в Интернете с помощью командлетов Get-Command и Get-Help.

IContentCmdletProvider

Интерфейс System.Management.Automation.Provider.IContentCmdletProvider определяет поставщика контента, выполняющего операции с содержимым элемента данных. В следующей таблице перечислены командлеты, предоставляемые этим интерфейсом.

cmdlet Определение
Add-Content Добавляет указанные длины значений к содержимому указанного элемента. Этот командлет не передает выходной объект через конвейер, если его PassThru параметр не указан.
Clear-Content Задает содержимое указанного элемента значение clear. Этот командлет не передает выходной объект через конвейер, если его PassThru параметр не указан.
Get-Content Извлекает содержимое указанных элементов и передает результирующий объект.
Set-Content Заменяет существующее содержимое для указанных элементов. Этот командлет не передает выходной объект через конвейер, если его PassThru параметр не указан.

IPropertyCmdletProvider

Интерфейс System.Management.Automation.Provider.IPropertyCmdletProvider определяет поставщик Windows PowerShell, который выполняет операции по свойствам элементов в хранилище данных. В следующей таблице перечислены командлеты, предоставляемые этим интерфейсом.

Примечание.

Параметр Path в этих командлетах указывает путь к элементу вместо идентификации свойства.

cmdlet Определение
Clear-ItemProperty Задает свойства указанных элементов значением clear. Этот командлет не передает выходной объект через конвейер, если его PassThru параметр не указан.
Get-ItemProperty Извлекает свойства из указанных элементов и передает результирующий объект.
Set-ItemProperty Задает свойства указанных элементов с указанными значениями. Этот командлет не передает выходной объект через конвейер, если его PassThru параметр не указан.

IDynamicPropertyCmdletProvider

Интерфейс System.Management.Automation.Provider.IDynamicPropertyCmdletProvider, производный от System.Management.Automation.Provider.IPropertyCmdletProvider, определяет поставщик, указывающий динамические параметры для поддерживаемых командлетов. Этот тип поставщика обрабатывает операции, для которых свойства можно определить во время выполнения, например новую операцию свойства. Такие операции недоступны для элементов с статически определенными свойствами. В следующей таблице перечислены командлеты, предоставляемые этим интерфейсом.

cmdlet Определение
Copy-ItemProperty Копирует свойство из указанного элемента в другой элемент. Этот командлет не передает выходной объект через конвейер, если его PassThru параметр не указан.
Move-ItemProperty Перемещает свойство из указанного элемента в другой элемент. Этот командлет не передает выходной объект через конвейер, если его PassThru параметр не указан.
New-ItemProperty Создает свойство для указанных элементов и передает результирующий объект.
Remove-ItemProperty Удаляет свойство для указанных элементов.
Rename-ItemProperty Переименовывает свойство указанных элементов. Этот командлет не передает выходной объект через конвейер, если его PassThru параметр не указан.

ISecurityDescriptorCmdletProvider

Интерфейс System.Management.Automation.Provider.ISecurityDescriptorCmdletProvider добавляет функции дескриптора безопасности к поставщику. Этот интерфейс позволяет пользователю получать и задавать сведения о дескрипторе безопасности для элемента в хранилище данных. В следующей таблице перечислены командлеты, предоставляемые этим интерфейсом.

cmdlet Определение
Get-Acl Извлекает сведения, содержащиеся в списке управления доступом (ACL), который является частью дескриптора безопасности, используемого для защиты ресурсов операционной системы, например файла или объекта.
Set-Acl Задает сведения для ACL. Он находится в виде экземпляра System.Security.AccessControl.ObjectSecurity в элементах, назначенных для указанного пути. Этот командлет может задать сведения о файлах, ключах и подразделах реестра или любом другом элементе поставщика, если поставщик Windows PowerShell поддерживает настройку сведений о безопасности.

См. также

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

принцип работы Windows PowerShell

пакета SDK для Windows PowerShell