Windows PowerShell 提供程序概述
Windows PowerShell 提供程序允许像文件系统一样公开任何数据存储,就像它是装载的驱动器一样。 例如,内置注册表提供程序允许你像在计算机 c
驱动器一样导航注册表。 提供程序还可以替代 Item
cmdlet(例如,Get-Item
、Set-Item
等),以便在导航文件系统时可以像处理文件和目录一样处理数据存储中的数据。 有关提供程序和驱动器以及 Windows PowerShell 中的内置提供程序的详细信息,请参阅 about_Providers。
提供程序和驱动器
提供程序定义用于访问、导航和编辑数据存储的逻辑,而驱动器指定数据存储(或数据存储的一部分)的特定入口点(或提供程序定义的类型的部分)。 例如,注册表提供程序允许访问注册表中的 hives 和密钥,而 HKLM 和 HKCU 驱动器在注册表中指定相应的 Hives。 HKLM 和 HKCU 驱动器都使用注册表提供程序。
编写提供程序时,可以指定在提供程序可用时自动创建的默认驱动器驱动器。 此外,还可以定义一个方法来创建使用该提供程序的新驱动器。
提供程序类型
有几种类型的提供程序,每个提供程序提供不同的功能级别。 提供程序作为派生自 System.Management.Automation.SessionStateCategoryCmdletProvider 类的后代之一的类实现。 有关不同类型的提供程序的信息,请参阅 提供程序类型。
提供程序 cmdlet
提供程序可以实现与 cmdlet 对应的方法,并在该提供程序的驱动器中使用时为这些 cmdlet 创建自定义行为。 根据提供程序的类型,可以使用不同的 cmdlet 集。 有关可用于在提供程序中自定义的 cmdlet 的完整列表,请参阅 提供程序 cmdlet。
提供程序路径
用户像文件系统一样导航提供程序驱动器。 因此,他们希望路径的语法与文件系统导航中使用的路径相对应。 当用户运行提供程序 cmdlet 时,他们指定要访问的项的路径。 可以通过多种方式解释指定的路径。 提供程序应支持以下一个或多个路径类型。
驱动器限定的路径
驱动器限定的路径是项名称、项所在的容器和子容器以及访问该项的 Windows PowerShell 驱动器的组合。 (驱动器由用于访问数据存储的提供程序定义。 此路径以驱动器名称开头,后跟冒号(:))。 例如:Get-ChildItem C:
提供程序限定的路径
若要允许 Windows PowerShell 引擎初始化和取消初始化提供程序,提供程序必须支持提供程序限定的路径。 例如,用户可以初始化和取消初始化 FileSystem 提供程序,因为它定义了以下提供程序限定的路径:FileSystem::\\uncshare\abc\bar
。
提供程序直接路径
若要允许远程访问 Windows PowerShell 提供程序,它应支持提供程序直接路径,以便直接传递到当前位置的 Windows PowerShell 提供程序。 例如,注册表 Windows PowerShell 提供程序可以使用 \\server\regkeypath
作为提供程序直接路径。
提供程序内部路径
若要允许提供程序 cmdlet 使用非 Windows PowerShell 应用程序编程接口(API)访问数据,Windows PowerShell 提供程序应支持提供程序内部路径。 此路径在提供程序限定路径中的“:”后面指示。 例如,FileSystem Windows PowerShell 提供程序的提供程序内部路径 \\uncshare\abc\bar
。
重写 cmdlet 参数
提供程序可以重写某些特定于提供程序的 cmdlet 的行为。 有关可重写的参数列表以及如何在提供程序类中重写这些参数,请参阅 Provider cmdlet 参数
动态参数
当用户为 cmdlet 的某个静态参数指定特定值时,提供程序可以定义添加到提供程序 cmdlet 中的动态参数。 提供程序通过实现一个或多个动态参数方法来实现这一点。 有关可用于添加动态参数的 cmdlet 参数列表以及用于实现它们的方法,请参阅 提供程序 cmdlet 动态参数。
提供程序功能
System.Management.Automation.Provider.ProviderCapabilities 枚举定义了提供程序可以支持的大量功能。 其中包括使用通配符、筛选项和支持事务的功能。 若要指定提供程序的功能,请添加 System.Management.Automation.Provider.ProviderCapabilities 枚举的值列表, 与逻辑 OR
作结合使用,作为提供程序类 System.Management.Automation.Provider.CmdletProviderAttribute.ProviderCapabilities* 属性(属性的第二个参数) System.Management.Automation.Provider.CmdletProviderAttribute 属性。 例如,以下属性指定提供程序支持 System.Management.Automation.Provider.ProviderCapabilitiesShouldProcess 和 System.Management.Automation.Provider.ProviderCapabilitiesTransactions 功能。
[CmdletProvider(RegistryProvider.ProviderName, ProviderCapabilities.ShouldProcess | ProviderCapabilities.Transactions)]
提供程序 cmdlet 帮助
编写提供程序时,可以为你支持的提供程序 cmdlet 实现自己的帮助。 这包括每个提供程序 cmdlet 的单个帮助主题或多个版本的帮助主题,这些帮助主题适用于提供程序 cmdlet 根据动态参数的使用方式不同的情况。 若要支持提供程序特定于 cmdlet 的帮助,提供程序必须实现 System.Management.Automation.Provider.ICmdletProviderSupportsHelp 接口。
Windows PowerShell 引擎调用 System.Management.Automation.Provider.ICmdletProviderSupportsHelp.GetHelpMaml* 方法以显示提供程序 cmdlet 的帮助主题。 引擎提供运行 Get-Help
cmdlet 和用户的当前路径时指定的 cmdlet 的名称。
如果提供程序为不同的驱动器实现相同提供程序 cmdlet 的不同版本,则需要当前路径。 该方法必须返回一个字符串,其中包含 cmdlet 帮助的 XML。
帮助文件的内容是使用 PSMAML XML 编写的。 这是用于为独立 cmdlet 编写帮助内容的相同 XML 架构。 将自定义 cmdlet 帮助的内容添加到提供程序在 CmdletHelpPaths
元素下的帮助文件中。 以下示例显示了单个提供程序 cmdlet 的 command
元素,并演示如何指定提供程序的提供程序 cmdlet 的名称。 支持
<CmdletHelpPaths>
<command:command>
<command:details>
<command:name>ProviderCmdletName</command:name>
<command:verb>Verb</command:verb>
<command:noun>Noun</command:noun>
<command:details>
</command:command>
<CmdletHelpPath>