gpt4 book ai didi

c# - 如何在 C# PowerShell Cmdlet 中动态定义类

转载 作者:太空狗 更新时间:2023-10-29 20:14:51 25 4
gpt4 key购买 nike

我有一些数据是从数据源中获取的,这些数据是我存储在 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 提供的工具执行此操作的清晰示例。似乎应该有一种方法可以通过扩展 PSObject 来动态创建一个类, PSProperty , 和 PSMethod Powershell SDK 中描述的类.

不幸的是,关于这个的文档看起来很糟糕,有很多荒谬的陈述,比如“虽然可以从这个类派生,但没有确定的方案可以做到这一点,任何这样做的尝试都可能导致意想不到的结果行为。

更糟糕的是,MSDN 中解释 PowerShell 扩展类型系统的所有链接似乎都很糟糕!我在 Web 上看到的唯一示例是如何从 PowerShell 脚本执行此操作,而不是针对使用 C# 和 SDK 开发 cmdlet 的人员。

你好,PowerShell 团队的任何人都在听吗?

最佳答案

定义您自己的新类的能力是他们在 PowerShell v2 中添加的新功能。这是一个示例:

PS C:\> $def = @"
public class MyClass {
public string MyProperty;
}
"@

PS C:\> Add-Type -TypeDefinition $def
PS C:\> $obj = New-Object MyClass
PS C:\> $obj.MyProperty = "Hello"
PS C:\> $obj

MyProperty
----------
Hello

如果您不需要太复杂的东西,您可以利用“splatting”——通常这是为了生成名称/值对以传递给 cmdlet 或函数,但它可以作为一种通用的也是各种对象:

PS C:\> $splat = @{
Name = "goyuix"
Site = "stackoverflow.com"
Tag = "powershell"
}

PS H:\> $splat

Name Value
---- -----
Name Goyuix
Site stackoverflow.com
Tag powershell

关于c# - 如何在 C# PowerShell Cmdlet 中动态定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5355413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com