当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 创建基本 Windows PowerShell 提供程序

作者:精品下载站 日期:2024-12-14 20:29:05 浏览:12 分类:玩电脑

创建基本 Windows PowerShell 提供程序


本主题是学习如何创建 Windows PowerShell 提供程序的起点。这里描述的基本提供程序提供了启动和停止提供程序的方法,尽管此提供程序不提供访问数据存储或获取或设置数据存储中的数据的方法,但它确实提供了所有提供商。

如前所述,此处描述的基本提供程序实现了启动和停止提供程序的方法。 Windows PowerShell 运行时调用这些方法来初始化和取消初始化提供程序。

笔记

您可以在 Windows PowerShell 提供的 AccessDBSampleProvider01.cs 文件中找到此提供程序的示例。

定义 Windows PowerShell 提供程序类

创建 Windows PowerShell 提供程序的第一步是定义其 .NET 类。此基本提供程序定义了一个名为 AccessDBProvider 的类,该类派生自 System.Management.Automation.Provider.Cmdletprovider 基类。

建议您将提供程序类放置在 API 命名空间的 Providers 命名空间中,例如 xxx.PowerShell.Providers。此提供程序使用 Microsoft.Samples.PowerShell.Provider 命名空间,所有 Windows PowerShell 提供程序示例都在其中运行。

笔记

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.Providercapability 枚举定义。因为这是一个基础提供程序,所以它不支持任何功能。

笔记

Windows PowerShell 提供程序的完全限定名称包括程序集名称和 Windows PowerShell 在提供程序注册时确定的其他属性。

定义特定于提供者的状态信息

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.Runtimedefineparameterdictionary 对象的解析属性的属性和字段。

此基本提供程序不会重写此方法。但是,以下代码显示了此方法的默认实现:

取消初始化提供者

要释放 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}

参见

创建 Windows PowerShell 提供程序

设计您的 Windows PowerShell 提供程序

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯