设计您的Windows PowerShell提供者

如果你的产品或配置暴露了一组存储数据,比如用户想要浏览的数据库,你应该实现 Windows PowerShell 提供者。 此外,如果你的产品提供容器,即使不是多层容器,实现 Windows PowerShell 提供者也是合理的。 例如,如果 Copy、Move、Rename、New 或 Remove 这些 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 提供者应支持提供者-内部路径。 该路径在提供者合格路径的“::”之后标注。 例如,文件系统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。 本节介绍了指令列特,但不描述其参数。

利用会话状态,Windows PowerShell 运行时为某些 Windows PowerShell 提供者提供多个位置命令,如 Get-LocationSet-LocationPop-LocationPush-Location cmdlet。 你可以使用 Get-Help 该指令(cmdlet)获取这些位置指令(cmdlet)的信息。

CmdletProvider 基类

System.Management.Automation.Provider.CmdletProvider类定义了一个基本的WindowsPowerShell提供者。 该类支持提供者声明,并提供许多面向所有 Windows PowerShell 提供者可用的属性和方法。 该类由 Get-PSProvider cmdlet 调用,以列出会话中所有可用的提供者。 该指令的实现由会话状态提供。

注释

Windows PowerShell 提供者对所有 Windows PowerShell 语言的作用域开放。

DriveCmdletProvider 基类

System.Management.Automation.Provider.DriveCmdletProvider 类定义了一个 Windows PowerShell 驱动器提供者,支持添加新驱动器、移除现有驱动器和初始化默认驱动器的作。 例如,Windows PowerShell 提供的 FileSystem 提供者会为所有挂载的卷初始化驱动器,如硬盘和 CD/DVD 设备驱动器。

该类源自 System.Management.Automation.Provider.CmdletProvider 基类。 下表列出了该类暴露的 cmdlet。 除了上述命令外, Get-PSDrive cmdlet(通过会话状态暴露)是一个相关的命令,用于检索可用驱动器。

Cmdlet Definition
New-PSDrive 为会话创建一个新的硬盘,并传输硬盘信息。
Remove-PSDrive 会移除会话中的一个驱动。

ItemCmdletProvider 基类

System.Management.Automation.Provider.ItemCmdletProvider类定义了一个Windows的项目提供者,对数据存储中的单个项目执行作,且不假设任何容器或导航功能。 该类源自 System.Management.Automation.Provider.DriveCmdletProvider 基类。 下表列出了该类暴露的 cmdlet。

Cmdlet Definition
Clear-Item 清除指定位置当前项目的内容,并用提供者指定的“清除”值替换。 除非 PassThru 参数指定,否则该命令不将输出对象传递通过管道。
Get-Item 从指定位置检索物品,并对生成的对象进行流式传输。
Invoke-Item 在指定路径上调用该项目的默认动作。
Set-Item 将物品设置为指定位置,并以所示值进行。 除非 PassThru 参数指定,否则该命令不将输出对象传递通过管道。
Resolve-Path 解决 Windows PowerShell 路径的万用符,并流式传输路径信息。
Test-Path 测试指定路径,若存在则返回,否则返回truefalse。 该 cmdlet 实现用于支持 IsContainerSystem.Management.Automation.Provider.CmdletProvider.WriteItemObject* 方法的参数。

ContainerCmdletProvider 基类

System.Management.Automation.Provider.ContainerCmdletProvider类定义了一个Windows的PowerShell容器提供者,它向用户开放一个容器,用于存储数据存储的项。 请注意,Windows PowerShell 容器提供者只能在有一个容器(无嵌套容器)且包含物品时使用。 如果有嵌套容器,那么你必须实现一个 Windows PowerShell 导航提供者。

该类源自 System.Management.Automation.Provider.ItemCmdletProvider 基类。 下表定义了该类实现的 cmdlet。

Cmdlet Definition
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。

Cmdlet Definition
Combine-Path 将两条路径合并为一条路径,使用提供者专用的路径分隔符。 该指令子流字符串。
Move-Item 将物品移动到指定位置。 除非 PassThru 参数指定,否则该命令不将输出对象传递通过管道。

一个相关的 cmdlet 是由 Windows PowerShell 提供的基础 Parse-Path cmdlet。 该 cmdlet 可用于解析 Windows PowerShell 路径以支持该 Parent 参数。 它流式传输父路径字符串。

选择支持的提供者接口

除了源自 Windows PowerShell 的某个基类外,您的 Windows PowerShell 提供者还可以通过从以下一个或多个提供者接口中衍生来支持其他功能。 本节定义了这些接口及其支持的 cmdlet。 它不描述接口支持的 cmdlet 参数。 Cmdlet参数信息可通过 Get-CommandGet-Help cmdlet在线获取。

IContentCmdletProvider

System.Management.Automation.Provider.IContentCmdletProvider接口定义了对数据项内容执行作的内容提供者。 下表列出了该接口暴露的 cmdlet。

Cmdlet Definition
Add-Content 将指定值长度附加到指定项目的内容上。 除非 PassThru 参数指定,否则该命令不将输出对象传递通过管道。
Clear-Content 将指定物品的内容设置为“清除”值。 除非 PassThru 参数指定,否则该命令不将输出对象传递通过管道。
Get-Content 检索指定项目的内容并对生成的对象进行流式传输。
Set-Content 替换指定物品的现有内容。 除非 PassThru 参数指定,否则该命令不将输出对象传递通过管道。

IPropertyCmdletProvider

System.Management.Automation.Provider.IPropertyCmdletProvider接口定义了一个属性,用于对数据存储中项目的属性进行作。 下表列出了该接口暴露的 cmdlet。

注释

Path这些 cmdlet 上的参数表示指向某个项目的路径,而不是识别属性。

Cmdlet Definition
Clear-ItemProperty 将指定项目的属性设置为“清除”值。 除非 PassThru 参数指定,否则该命令不将输出对象传递通过管道。
Get-ItemProperty 从指定项目中检索属性并流式传输所得对象。
Set-ItemProperty 将指定项目的属性设置为指定值。 除非 PassThru 参数指定,否则该命令不将输出对象传递通过管道。

IDynamicPropertyCmdletProvider

System.Management.Automation.Provider.IDynamicPropertyCmdletProvider接口源自System.Management.Automation.Provider.IPropertyCmdletProvider,定义了一个为其支持的指令集指定动态参数的提供者。 这种类型的提供者处理可以在运行时定义属性的作,例如新的属性作。 对于具有静态定义属性的项,无法进行此类作。 下表列出了该接口暴露的 cmdlet。

Cmdlet Definition
Copy-ItemProperty 将指定物品中的属性复制到另一个物品。 除非 PassThru 参数指定,否则该命令不将输出对象传递通过管道。
Move-ItemProperty 将一个属性从指定物品移动到另一个物品。 除非 PassThru 参数指定,否则该命令不将输出对象传递通过管道。
New-ItemProperty 在指定的项目上创建属性并流处理生成的对象。
Remove-ItemProperty 移除指定物品的属性。
Rename-ItemProperty 重命名指定项目的属性。 除非 PassThru 参数指定,否则该命令不将输出对象传递通过管道。

ISecurityDescriptorCmdletProvider

System.Management.Automation.Provider.ISecurityDescriptorCmdletProvider接口为提供者添加安全描述符功能。 该接口允许用户获取并设置数据存储中项目的安全描述符信息。 下表列出了该接口暴露的 cmdlet。

Cmdlet Definition
Get-Acl 检索访问控制列表(ACL)中包含的信息,ACL是用于保护作系统资源(例如文件或对象)的安全描述符的一部分。
Set-Acl 设置ACL的信息。 它以 System.Security.AccessControl.ObjectSecurity 的实例形式存在于指定路径指定的项目上。 该命令可以设置注册表中的文件、键和子键信息,或任何其他提供者项,前提是 Windows PowerShell 提供者支持安全信息的设置。

另请参阅

创建 Windows PowerShell 提供者

Windows PowerShell 的工作原理

Windows PowerShell SDK