【发布时间】:2011-03-18 17:05:19
【问题描述】:
我从数据源中获取了一些数据,这些数据是我存储在 Dictionary
我想动态定义一个类,其属性映射到字典中的键/值对和基于它所代表的数据类型的方法。这将允许 cmdlet 的用户将值作为对象的属性进行访问,并在其上调用方法。
我看到了一个使用 Get-WmiObject 的示例。它返回 ManagementObject 的实例(基本上是一个通用属性包),但用户可以直接访问属性并调用其上的方法(即无需调用 ManagementObject 上的 GetPropertyValue/InvokeMethod 方法)。
PS C:\temp> $comp = Get-WmiObject Win32_ComputerSystem
PS C:\temp> $comp | Get-Member
TypeName: System.Management.ManagementObject#root\cimv2\Win32_ComputerSystem
Name MemberType Definition
---- ---------- ----------
JoinDomainOrWorkgroup Method System.Management.ManagementBaseObject JoinDomainO
Rename Method System.Management.ManagementBaseObject Rename(Syst
SetPowerState Method System.Management.ManagementBaseObject SetPowerSta
UnjoinDomainOrWorkgroup Method System.Management.ManagementBaseObject UnjoinDomai
AdminPasswordStatus Property System.UInt16 AdminPasswordStatus {get;set;}
AutomaticManagedPagefile Property System.Boolean AutomaticManagedPagefile {get;set;}
AutomaticResetBootOption Property System.Boolean AutomaticResetBootOption {get;set;}
... etc ...
如何使用我自己的对象执行此操作?
更新
接受 Keith 的回答,这是一种用于动态生成代码的通用 .NET 框架方法。这应该适用于我的场景,尽管我认为这可能有点矫枉过正。
我希望有人能提供一个使用 PowerShell 提供的工具执行此操作的明确示例。似乎应该有一种方法可以通过扩展Powershell SDK 中描述的PSObject、PSProperty 和PSMethod 类来动态创建类。
不幸的是,有关此的文档似乎很差,有很多荒谬的陈述,例如“尽管可以从此类派生,但没有既定的场景可以这样做,任何尝试这样做都可能导致意外行为。"
更糟糕的是,MSDN 中解释 PowerShell 扩展类型系统的所有链接似乎都很糟糕!我在网上看到的唯一示例是如何从 PowerShell 脚本执行此操作,而不是针对使用 C# 和 SDK 开发 cmdlet 的人。
您好,PowerShell 团队有人在听吗?
【问题讨论】:
标签: c# powershell powershell-2.0