设计 Windows PowerShell 提供程序

如果你的产品或配置公开了一组存储的数据,例如用户想要导航或浏览的数据库,则应实现 Windows PowerShell 提供程序。 此外,如果你的产品提供容器,即使它不是多级容器,实现 Windows PowerShell 提供程序也有意义。 例如,如果 cmdlet 谓词复制、移动、重命名、新建或删除作为产品或配置数据的作,你可能想要实现 Windows PowerShell 容器提供程序。

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 是 Windows PowerShell 提供的 FileSystem 提供程序的提供程序限定路径。

定义 Provider-Direct 路径

若要允许远程访问 Windows PowerShell 提供程序,它应支持提供程序直接路径,以便直接传递到当前位置的 Windows PowerShell 提供程序。 例如,注册表 Windows PowerShell 提供程序可以使用 \\server\regkeypath 作为提供程序直接路径。

定义 Provider-Internal 路径

若要允许提供程序 cmdlet 使用非 Windows PowerShell 应用程序编程接口(API)访问数据,Windows PowerShell 提供程序应支持提供程序内部路径。 此路径在提供程序限定路径中的“:”后面指示。 例如,FileSystem Windows PowerShell 提供程序的提供程序内部路径为 \\uncshare\abc\bar。

更改存储的数据

重写修改基础数据存储的方法时,请始终调用 System.Management.Automation.Provider.CmdletProvider.WriteItemObject* 方法,该方法更改的项的 up-to日期版本最多。 提供程序基础结构确定项对象是否需要传递给管道,例如用户何时指定 -PassThru 参数。 如果检索最 up-to日期项是一项代价高昂的作(性能-明智),则可以测试 Context.PassThru 属性,以确定是否确实需要写入生成的项。

为提供程序选择基类

Windows PowerShell 提供了许多基类,可用于实现自己的 Windows PowerShell 提供程序。 设计提供程序时,请选择本节中所述的基类,最符合你的要求。

每个 Windows PowerShell 提供程序基类都提供一组 cmdlet。 本部分介绍 cmdlet,但不描述其参数。

使用会话状态,Windows PowerShell 运行时使某些 Windows PowerShell 提供程序可以使用多个位置 cmdlet,例如 Get-LocationSet-LocationPop-LocationPush-Location cmdlet。 可以使用 Get-Help cmdlet 获取有关这些位置 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 提供的 FileSystem 提供程序为装载的所有卷(例如硬盘驱动器和 CD/DVD 设备驱动器)初始化驱动器。

此类派生自 System.Management.Automation.Provider.CmdletProvider 基类。 下表列出了此类公开的 cmdlet。 除了列出的 cmdlet 之外,Get-PSDrive cmdlet(由会话状态公开)是用于检索可用驱动器的相关 cmdlet。

Cmdlet 定义
New-PSDrive 为会话创建新驱动器,并流式传输驱动器信息。
Remove-PSDrive 从会话中删除驱动器。

ItemCmdletProvider 基类

System.Management.Automation.Provider.ItemCmdletProvider 类定义一个 Windows PowerShell 项提供程序,该提供程序对数据存储的各个项执行作,并且它不假定任何容器或导航功能。 此类派生自 System.Management.Automation.Provider.DriveCmdletProvider 基类。 下表列出了此类公开的 cmdlet。

Cmdlet 定义
Clear-Item 清除指定位置的项的当前内容,并将其替换为提供程序指定的“clear”值。 除非指定输出对象 PassThru 参数,否则此 cmdlet 不会通过管道传递输出对象。
Get-Item 从指定位置检索项,并流式传输结果对象。
Invoke-Item 调用指定路径处项的默认作。
Set-Item 使用指示的值在指定位置设置项。 除非指定输出对象 PassThru 参数,否则此 cmdlet 不会通过管道传递输出对象。
Resolve-Path 解析 Windows PowerShell 路径的通配符,并流式传输路径信息。
Test-Path 测试指定的路径,并返回 true 是否存在,否则返回 false。 实现此 cmdlet 以支持 System.Management.Automation.Provider.CmdletProvider.WriteItemObject* 方法的 IsContainer 参数。

ContainerCmdletProvider 基类

System.Management.Automation.Provider.ContainerCmdletProvider 类定义一个 Windows PowerShell 容器提供程序,该提供程序向用户公开用于数据存储项的容器。 请注意,仅当有一个容器(没有嵌套容器)包含其中的项时,才能使用 Windows PowerShell 容器提供程序。 如果存在嵌套容器,则必须实现 Windows PowerShell 导航提供程序。

此类派生自 System.Management.Automation.Provider.ItemCmdletProvider 基类。 下表定义了此类实现的 cmdlet。

Cmdlet 定义
Copy-Item 将项从一个位置复制到另一个位置。 除非指定输出对象 PassThru 参数,否则此 cmdlet 不会通过管道传递输出对象。
Get-ChildItem 检索位于指定位置的子项,并将其作为对象流式传输。
New-Item 在指定位置创建新项,并流式传输结果对象。
Remove-Item 从指定位置删除项。
Rename-Item 重命名指定位置的项。 除非指定输出对象 PassThru 参数,否则此 cmdlet 不会通过管道传递输出对象。

System.Management.Automation.Provider.NavigationCmdletProvider 类定义 Windows PowerShell 导航提供程序,该提供程序对使用多个容器的项执行作。 此类派生自 System.Management.Automation.Provider.ContainerCmdletProvider 基类。 下表列出了此类公开的 cmdlet。

Cmdlet 定义
Combine-Path 使用提供程序特定的分隔符在路径之间将两个路径合并为一个路径。 此 cmdlet 流式传输字符串。
Move-Item 将项移动到指定位置。 除非指定输出对象 PassThru 参数,否则此 cmdlet 不会通过管道传递输出对象。

相关的 cmdlet 是 Windows PowerShell 提供的基本 Parse-Path cmdlet。 此 cmdlet 可用于分析 Windows PowerShell 路径以支持 Parent 参数。 它流式传输父路径字符串。

选择要支持的提供程序接口

除了从其中一个 Windows PowerShell 基类派生之外,Windows PowerShell 提供程序还可以通过从以下一个或多个提供程序接口派生来支持其他功能。 本部分定义这些接口和每个接口支持的 cmdlet。 它不描述接口支持的 cmdlet 的参数。 可以使用 Get-CommandGet-Help cmdlet 联机获取 Cmdlet 参数信息。

IContentCmdletProvider

System.Management.Automation.Provider.IContentCmdletProvider 接口定义对数据项内容执行作的内容提供程序。 下表列出了此接口公开的 cmdlet。

Cmdlet 定义
Add-Content 将指示的值长度追加到指定项的内容。 除非指定输出对象 PassThru 参数,否则此 cmdlet 不会通过管道传递输出对象。
Clear-Content 将指定项的内容设置为“clear”值。 除非指定输出对象 PassThru 参数,否则此 cmdlet 不会通过管道传递输出对象。
Get-Content 检索指定项的内容并流式传输结果对象。
Set-Content 替换指定项的现有内容。 除非指定输出对象 PassThru 参数,否则此 cmdlet 不会通过管道传递输出对象。

IPropertyCmdletProvider

System.Management.Automation.Provider.IPropertyCmdletProvider 接口定义一个属性 Windows PowerShell 提供程序,该属性对数据存储中的项的属性执行作。 下表列出了此接口公开的 cmdlet。

注释

这些 cmdlet 上的 Path 参数指示项的路径,而不是标识属性。

Cmdlet 定义
Clear-ItemProperty 将指定项的属性设置为“clear”值。 除非指定输出对象 PassThru 参数,否则此 cmdlet 不会通过管道传递输出对象。
Get-ItemProperty 从指定的项中检索属性,并流式传输结果对象。
Set-ItemProperty 使用指示的值设置指定项的属性。 除非指定输出对象 PassThru 参数,否则此 cmdlet 不会通过管道传递输出对象。

IDynamicPropertyCmdletProvider

System.Management.Automation.Provider.IDynamicPropertyCmdletProvider 接口(派生自 System.Management.Automation.Provider.IPropertyCmdletProvider)定义一个提供程序,该提供程序指定其支持的 cmdlet 的动态参数。 这种类型的提供程序处理可在运行时定义属性的作,例如,新的属性作。 对于具有静态定义的属性的项,无法执行此类作。 下表列出了此接口公开的 cmdlet。

Cmdlet 定义
Copy-ItemProperty 将属性从指定项复制到另一项。 除非指定输出对象 PassThru 参数,否则此 cmdlet 不会通过管道传递输出对象。
Move-ItemProperty 将属性从指定项移动到另一项。 除非指定输出对象 PassThru 参数,否则此 cmdlet 不会通过管道传递输出对象。
New-ItemProperty 在指定的项上创建一个属性,并流式传输结果对象。
Remove-ItemProperty 删除指定项的属性。
Rename-ItemProperty 重命名指定项的属性。 除非指定输出对象 PassThru 参数,否则此 cmdlet 不会通过管道传递输出对象。

ISecurityDescriptorCmdletProvider

System.Management.Automation.Provider.ISecurityDescriptorCmdletProvider 接口向提供程序添加安全描述符功能。 此接口允许用户获取和设置数据存储中项的安全描述符信息。 下表列出了此接口公开的 cmdlet。

Cmdlet 定义
Get-Acl 检索访问控制列表(ACL)中包含的信息,该列表是用于保护作系统资源的安全描述符的一部分,例如文件或对象。
Set-Acl 设置 ACL 的信息。 它采用 System.Security.AccessControl.ObjectSecurity 为指定路径的项的实例的形式。 如果 Windows PowerShell 提供程序支持设置安全信息,此 cmdlet 可以设置注册表中的文件、密钥和子项或任何其他提供程序项的相关信息。

另请参阅

创建 Windows PowerShell 提供程序

Windows PowerShell 的工作原理

Windows PowerShell SDK