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


Проектирование вашего провайдера Windows PowerShell

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

Пути Windows PowerShell определяют вашего провайдера

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

Для получения дополнительной информации о путях Windows PowerShell смотрите раздел «Как работает Windows PowerShell».

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Замечание

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

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

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

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

Cmdlet Definition
New-PSDrive Создаёт новый диск для сессии и транслирует информацию о диске.
Remove-PSDrive Убирает диск из сессии.

ItemCmdletProvider Base Class

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

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

ContainerCmdletProvider Base Class

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

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

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

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

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

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

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

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

IContentCmdletProvider

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

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

IPropertyCmdletProvider

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

Замечание

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

Cmdlet Definition
Clear-ItemProperty Устанавливает свойства указанных элементов на значение «clear». Этот cmdlet не передаёт выходной объект через конвейер, если не указан его PassThru параметр.
Get-ItemProperty Извлекает свойства из указанных элементов и передаёт полученные объекты в потоке.
Set-ItemProperty Задаёт свойства указанных элементов с указанными значениями. Этот cmdlet не передаёт выходной объект через конвейер, если не указан его PassThru параметр.

IDynamicPropertyCmdletProvider

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

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

ISecurityDescriptorCmdletProvider

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

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

См. также

Создание провайдеров Windows PowerShell

Как работает Windows PowerShell

Windows PowerShell SDK