本主题描述如何创建一个提供者,使用户能够作数据存储中项目的属性。 因此,这种类型的提供者被称为Windows PowerShell属性提供者。 例如,Windows PowerShell提供的注册表提供者将注册表键值作为注册表键项的属性来处理。 这种类型的提供者必须在 .NET 类的实现中添加 System.Management.Automation.Provider.IPropertyCmdletProvider 接口。
注释
Windows PowerShell 提供了一个模板文件,你可以用它来开发 Windows PowerShell 提供者。 该TemplateProvider.cs文件可在 Windows Vista 和 .NET Framework 3.0 运行时组件的 Microsoft Windows 软件开发套件中获得。 有关下载说明,请参见 《如何安装Windows PowerShell》和《Windows PowerShell SDK》。 下载的模板可在 <PowerShell Samples> 目录中获取。 你应该复制这个文件,用它来创建一个新的 Windows PowerShell 提供者,去除不需要的功能。 有关其他 Windows PowerShell 提供者实现的更多信息,请参见 “设计你的 Windows PowerShell 提供者”。
注意
你的属性提供者的方法应该通过 System.Management.Automation.Provider.CmdletProvider.WritepropertyObject* 方法来写入所有对象。
定义 Windows PowerShell 提供者
属性提供者必须创建一个支持 System.Management.Automation.Provider.IPropertyCmdletProvider 接口的 .NET 类。 这是Windows PowerShell提供的TemplateProvider.cs文件中的默认类声明。
定义基础功能
System.Management.Automation.Provider.IPropertyCmdletProvider接口可以附加到任一提供者基类上,但System.Management.Automation.Provider.DriveCmdletProvider类除外。 添加你所使用的基类所需的基础功能。 关于基类的更多信息,请参见 《设计你的 Windows PowerShell 提供者》。
取回财产
要检索属性,提供者必须实现 System.Management.Automation.Provider.IPropertyCmdletProvider.GetProperty* 方法,以支持该 Get-ItemProperty 命令调用。 该方法检索位于指定提供者-内部路径(完全限定路径)的项目属性。
参数 providerSpecificPickList 表示要检索哪些属性。 如果参数为 null 空,方法应检索所有属性。 此外, System.Management.Automation.Provider.IPropertyCmdletProvider.GetProperty* 会写入一个 System.Management.Automation.PSObject 对象实例,表示检索属性的属性袋。 该方法应该什么都不返回。
建议 System.Management.Automation.Provider.IPropertyCmdletProvider.GetProperty* 的实现支持每个元素在选择列表中扩展属性名称的万用符。 为此,可以使用 System.Management.Automation.WildcardPattern 类来进行万用符模式匹配。
这是 Windows PowerShell 提供的 TemplateProvider.cs 文件中 System.Management.Automation.Provider.IPropertyCmdletProvider.GetProperty* 的默认实现。
关于实施GetProperty需要注意的事项
以下条件可能适用于您对 System.Management.Automation.Provider.IPropertyCmdletProvider.GetProperty*的实现:
在定义提供者类时,Windows PowerShell 属性提供者可能会声明从 System.Management.Automation.Provider.ProviderCapabilities 枚举中声明 ExpandWildcard、Filter、Include 或 Exclude 的提供者能力。 在这种情况下, System.Management.Automation.Provider.IPropertyCmdletProvider.GetProperty* 方法的实现需要确保传递给该方法的路径满足指定能力的要求。 为此,方法应访问相应属性,例如 System.Management.Automation.Provider.CmdletProvider.Exclude* 和 System.Management.Automation.Provider.CmdletProvider.Include* 属性。
默认情况下,除非将 System.Management.Automation.Provider.CmdletProvider.Force* 属性设置为
true,否则该方法的覆盖不应检索隐藏对象的读取器。 如果路径代表对用户隐藏的项目,且 System.Management.Automation.Provider.CmdletProvider.Force* 设置为false,则应写入错误。
将动态参数附加到 Get-ItemProperty cmdlet
Get-ItemProperty该 cmdlet 可能需要在运行时动态指定额外参数。 为了提供这些动态参数,Windows PowerShell 属性提供者必须实现 System.Management.Automation.Provider.IPropertyCmdletProvider.GetPropertyDynamicParameters* 方法。 参数 path 表示完全限定的提供者-内部路径,而 providerSpecificPickList 参数指定命令行中输入的提供者特定属性。 如果属性被传入 cmdlet,这个参数可能是 null 空的。 在这种情况下,该方法返回一个具有类似 cmdlet 类或 System.Management.Automation.RuntimeDefinedParameterDictionary 对象的属性和字段的对象。 Windows PowerShell 运行时使用返回的对象将参数添加到 cmdlet。
这是 Windows PowerShell 提供的 TemplateProvider.cs 文件中 System.Management.Automation.Provider.IPropertyCmdletProvider.GetPropertyDynamicParameters* 的默认实现。
设置属性
要设置属性,Windows PowerShell 属性提供者必须实现 System.Management.Automation.Provider.IPropertyCmdletProvider.SetProperty* 方法以支持从 cmdlet 调用 Set-ItemProperty 。 该方法在指定路径处设置一个或多个该项目的属性,并根据需要覆盖所提供的属性。
System.Management.Automation.Provider.IPropertyCmdletProvider.SetProperty* 还会写入一个 System.Management.Automation.PSObject 对象实例,表示更新属性的属性袋。
这是 Windows PowerShell 提供的 TemplateProvider.cs 文件中 System.Management.Automation.Provider.IPropertyCmdletProvider.SetProperty* 的默认实现。
实施 Set-ItemProperty 需要注意的事项
以下条件可能适用于 System.Management.Automation.Provider.IPropertyCmdletProvider.SetProperty*的实现:
在定义提供者类时,Windows PowerShell 属性提供者可能会声明从 System.Management.Automation.Provider.ProviderCapabilities 枚举中声明 ExpandWildcard、Filter、Include 或 Exclude 的提供者能力。 在这种情况下, System.Management.Automation.Provider.IPropertyCmdletProvider.SetProperty* 方法的实现必须确保传递给该方法的路径满足指定能力的要求。 为此,方法应访问相应属性,例如 System.Management.Automation.Provider.CmdletProvider.Exclude* 和 System.Management.Automation.Provider.CmdletProvider.Include* 属性。
默认情况下,除非将 System.Management.Automation.Provider.CmdletProvider.Force* 属性设置为
true,否则该方法的覆盖不应检索隐藏对象的读取器。 如果路径代表对用户隐藏的项目,且 System.Management.Automation.Provider.CmdletProvider.Force* 设置为false,则应写入错误。你实现 System.Management.Automation.Provider.IPropertyCmdletProvider.SetProperty* 方法时,应调用 System.Management.Automation.Provider.CmdletProvider.ShouldProcess 并验证其返回值,然后再对数据存储进行任何更改。 该方法用于确认作执行,当系统状态发生变化时,例如重命名文件。 System.Management.Automation.Provider.CmdletProvider.ShouldProcess 向用户发送待更改资源的名称,Windows PowerShell 运行时负责命令行设置或偏好变量,决定显示内容。
在调用 System.Management.Automation.Provider.CmdletProvider.ShouldProcess 返回
true后,如果可以进行潜在危险的系统修改, System.Management.Automation.Provider.IPropertyCmdletProvider.SetProperty* 方法应调用 System.Management.Automation.Provider.CmdletProvider.ShouldContinue 方法。 该方法向用户发送确认消息,允许额外反馈以指示作继续。
为 Set-ItemProperty cmdlet附加动态参数
Set-ItemProperty该 cmdlet 可能需要在运行时动态指定额外参数。 为了提供这些动态参数,Windows PowerShell 属性提供者必须实现 System.Management.Automation.Provider.IPropertyCmdletProvider.SetPropertyDynamicParameters* 方法。 该方法返回一个具有属性和字段的对象,解析属性类似于 cmdlet 类或 System.Management.Automation.RuntimeDefinedParameterDictionary 对象。 如果不添加动态参数,可以返回该 null 值。
这是 Windows PowerShell 提供的 TemplateProvider.cs 文件中 System.Management.Automation.Provider.IPropertyCmdletProvider.GetPropertyDynamicParameters* 的默认实现。
清算性质
要清除属性,Windows PowerShell 属性提供者必须实现 System.Management.Automation.Provider.IPropertyCmdletProvider.ClearProperty* 方法以支持该 Clear-ItemProperty cmdlet 调用。 该方法为位于指定路径的项目设置一个或多个属性。
这是 Windows PowerShell 提供的 TemplateProvider.cs 文件中 System.Management.Automation.Provider.IPropertyCmdletProvider.ClearProperty* 的默认实现。
关于实施ClearProperty需要记住的事项
以下条件可能适用于您的 System.Management.Automation.Provider.IPropertyCmdletProvider.ClearProperty*的实现:
在定义提供者类时,Windows PowerShell 属性提供者可能会声明从 System.Management.Automation.Provider.ProviderCapabilities 枚举中声明 ExpandWildcard、Filter、Include 或 Exclude 的提供者能力。 在这些情况下, System.Management.Automation.Provider.IPropertyCmdletProvider.ClearProperty* 方法的实现需要确保传递给该方法的路径符合指定能力的要求。 为此,方法应访问相应属性,例如 System.Management.Automation.Provider.CmdletProvider.Exclude* 和 System.Management.Automation.Provider.CmdletProvider.Include* 属性。
默认情况下,除非将 System.Management.Automation.Provider.CmdletProvider.Force* 属性设置为
true,否则该方法的覆盖不应检索隐藏对象的读取器。 如果路径代表对用户隐藏的项目,且 System.Management.Automation.Provider.CmdletProvider.Force* 设置为false,则应写入错误。你实现的 System.Management.Automation.Provider.IPropertyCmdletProvider.ClearProperty* 方法,应在对数据存储做任何更改前调用 System.Management.Automation.Provider.CmdletProvider.ShouldProcess 并验证其返回值。 该方法用于确认作执行,在系统状态进行更改前,例如清除内容。 System.Management.Automation.Provider.CmdletProvider.ShouldProcess 会将待更改资源的名称发送给用户,Windows PowerShell 运行时会考虑命令行设置或偏好变量来决定显示内容。
在调用 System.Management.Automation.Provider.CmdletProvider.ShouldProcess 后返回
true,如果可以进行潜在危险的系统修改, System.Management.Automation.Provider.IPropertyCmdletProvider.ClearProperty* 方法应调用 System.Management.Automation.Provider.CmdletProvider.ShouldContinue 方法。 该方法向用户发送确认信息,允许额外反馈以指示该潜在危险作应继续。
将动态参数附加到 Clear-ItemProperty cmdlet
Clear-ItemProperty该 cmdlet 可能需要在运行时动态指定额外参数。 为了提供这些动态参数,Windows PowerShell 属性提供者必须实现 System.Management.Automation.Provider.IPropertyCmdletProvider.ClearPropertyDynamicParameters* 方法。 该方法返回一个具有属性和字段的对象,解析属性类似于 cmdlet 类或 System.Management.Automation.RuntimeDefinedParameterDictionary 对象。 如果不添加动态参数,可以返回该 null 值。
这是 Windows PowerShell 提供的 TemplateProvider.cs 文件中 System.Management.Automation.Provider.IPropertyCmdletProvider.ClearPropertyDynamicParameters* 的默认实现。
构建 Windows PowerShell 提供者
请参阅 如何注册指令、提供者和托管应用程序。