本主题是了解如何创建 Windows PowerShell 提供程序的起点。 此处介绍的基本提供程序提供了启动和停止提供程序的方法,尽管此提供程序不提供访问数据存储或获取或设置数据存储中的数据的方法,但它确实提供了所有提供程序所需的基本功能。
如前所述,此处介绍的基本提供程序实现启动和停止提供程序的方法。 Windows PowerShell 运行时调用这些方法来初始化和取消初始化提供程序。
注释
可以在 Windows PowerShell 提供的AccessDBSampleProvider01.cs文件中找到此提供程序的示例。
定义 Windows PowerShell 提供程序类
创建 Windows PowerShell 提供程序的第一步是定义其 .NET 类。 此基本提供程序定义一个名为 AccessDBProvider
的类,该类派生自 System.Management.Automation.Provider.CmdletProvider 基类。
建议将提供程序类放置在 API 命名空间的 Providers
命名空间中,例如 xxx.PowerShell.Providers。 此提供程序使用运行所有 Windows PowerShell 提供程序示例的 Microsoft.Samples.PowerShell.Provider
命名空间。
注释
Windows PowerShell 提供程序的类必须显式标记为公共。 未标记为公共的类默认为内部类,并且不会由 Windows PowerShell 运行时找到。
下面是此基本提供程序的类定义:
[CmdletProvider("AccessDB", ProviderCapabilities.None)]
public class AccessDBProvider : CmdletProvider
在类定义之前,必须使用语法 [CmdletProvider()] 声明 System.Management.Automation.Provider.CmdletProviderAttribute 属性。
可以根据需要设置属性关键字以进一步声明类。 请注意,此处声明的 System.Management.Automation.Provider.CmdletProviderAttribute 属性包含两个参数。 第一个属性参数指定提供程序的默认友好名称,用户可以稍后修改该名称。 第二个参数指定提供程序在命令处理期间向 Windows PowerShell 运行时公开的 Windows PowerShell 定义的功能。 提供程序功能的可能值由 System.Management.Automation.Provider.ProviderCapabilities 枚举定义。 由于这是基础提供程序,因此它不支持任何功能。
注释
Windows PowerShell 提供程序的完全限定名称包括程序集名称和由 Windows PowerShell 在提供程序注册时确定的其他属性。
定义 Provider-Specific 状态信息
System.Management.Automation.Provider.CmdletProvider 基类和所有派生类被视为无状态类,因为 Windows PowerShell 运行时仅根据需要创建提供程序实例。 因此,如果提供程序需要提供程序特定数据的完全控制和状态维护,则必须从 System.Management.Automation.ProviderInfo 类派生类。 派生类应定义维护状态所需的成员,以便在 Windows PowerShell 运行时调用 System.Management.Automation.Provider.CmdletProvider.Start* 方法来初始化提供程序时访问提供程序特定的数据。
Windows PowerShell 提供程序还可以维护基于连接的状态。 有关维护连接状态的详细信息,请参阅 创建 PowerShell 驱动器提供程序。
初始化提供程序
若要初始化提供程序,Windows PowerShell 运行时在启动 Windows PowerShell 时调用 System.Management.Automation.Provider.CmdletProvider.Start* 方法。 在大多数情况下,提供程序可以使用此方法的默认实现,该方法只返回描述提供程序的 System.Management.Automation.ProviderInfo 对象。 但是,如果要添加其他初始化信息,则应实现自己的 System.Management.Automation.Provider.CmdletProvider.Start* 方法,该方法返回传递给提供程序的 System.Management.Automation.ProviderInfo 对象的修改版本。 通常,此方法应返回传递给它的提供的 System.Management.Automation.ProviderInfo 对象,或者返回包含其他初始化信息的修改 System.Management.Automation.ProviderInfo 对象。
此基本提供程序不会重写此方法。 但是,以下代码显示了此方法的默认实现:
提供程序可以维护提供程序特定的信息的状态,如 定义提供程序特定的数据状态中所述。 在这种情况下,你的实现必须重写 System.Management.Automation.Provider.CmdletProvider.Start* 方法才能返回派生类的实例。
启动动态参数
System.Management.Automation.Provider.CmdletProvider.Start* 方法的提供程序实现可能需要其他参数。 在这种情况下,提供程序应重写 System.Management.Automation.Provider.CmdletProvider.StartDynamicParameters* 方法,并返回具有与 cmdlet 类或 System.Management.Automation.RuntimeDefinedParameterDictionary 对象类似的属性和字段的对象。
此基本提供程序不会重写此方法。 但是,以下代码显示了此方法的默认实现:
取消初始化提供程序
若要释放 Windows PowerShell 提供程序使用的资源,提供程序应实现其自己的 System.Management.Automation.Provider.CmdletProvider.Stop* 方法。 此方法由 Windows PowerShell 运行时调用,以在会话结束时取消初始化提供程序。
此基本提供程序不会重写此方法。 但是,以下代码显示了此方法的默认实现:
代码示例
有关完整的示例代码,请参阅 AccessDbProviderSample01 代码示例。
测试 Windows PowerShell 提供程序
向 Windows PowerShell 注册 Windows PowerShell 提供程序后,可以通过在命令行上运行支持的 cmdlet 来测试它。 对于此基本提供程序,请运行新 shell 并使用 Get-PSProvider
cmdlet 检索提供程序列表,并确保 AccessDb 提供程序存在。
Get-PSProvider
将显示以下输出:
Name Capabilities Drives
---- ------------ ------
AccessDb None {}
Alias ShouldProcess {Alias}
Environment ShouldProcess {Env}
FileSystem Filter, ShouldProcess {C, Z}
Function ShouldProcess {function}
Registry ShouldProcess {HKLM, HKCU}