C# 如何通过管道将哈希表传递到cmdlet期望的字典?

C# 如何通过管道将哈希表传递到cmdlet期望的字典?,c#,powershell,C#,Powershell,我在C#中编写了一个小型PowerShell cmdlet,它需要一个字典参数。如何在PowerShell脚本中构造哈希表(或其他对象),以便将其作为参数传递给cmdlet 我已尝试在PowerShell脚本中创建哈希表,如下所示: $dic = @{ "Key1" = 1,2,3; "Key2" = "A","B","C"; } 然后将此消息传送到我的cmdlet: $props | Add-Properties 我的cmdlet: public class AddProp

我在C#中编写了一个小型PowerShell cmdlet,它需要一个字典参数。如何在PowerShell脚本中构造哈希表(或其他对象),以便将其作为参数传递给cmdlet

我已尝试在PowerShell脚本中创建哈希表,如下所示:

$dic = @{
    "Key1" = 1,2,3;
    "Key2" = "A","B","C";
}
然后将此消息传送到我的cmdlet:

$props | Add-Properties
我的cmdlet:

public class AddProps : PSCmdlet {
    [Parameter(ValueFromPipeline = true, Mandatory = true)]
    public Dictionary<string, object[]> Props {get; set;}

    protected override void ProcessRecord() {
        DoSomethingWithProps(Props);
    }
}
但是,当我尝试此操作时,会出现以下错误:

无法将输入对象绑定到该命令的任何参数,因为该命令不接受管道输入,或者输入及其属性与接受管道输入的任何参数都不匹配


我检查了
$props
的类型,它确实是一个
哈希表
。在研究了与此管道输入问题相关的其他问题以及如何在PowerShell中构建
哈希表
之后,我仍然不知道这里出了什么问题。

如果不想将类型更改为
哈希表
,可以使用接口来解决此问题:

PS> [hashtable].GetInterfaces()

IsPublic IsSerial Name
-------- -------- ----
True     False    IDictionary
True     False    ICollection
True     False    IEnumerable
True     False    ISerializable
True     False    IDeserializationCallback
True     False    ICloneable


我修改了
Props
属性以使用type
IDictionary
,但在使用更新的module@pavuxun定义接口时没有指定K,V。哦,我没有意识到我仍然在使用
Generic
类型,它确实需要K,V
PS> [hashtable].GetInterfaces()

IsPublic IsSerial Name
-------- -------- ----
True     False    IDictionary
True     False    ICollection
True     False    IEnumerable
True     False    ISerializable
True     False    IDeserializationCallback
True     False    ICloneable
[Parameter(ValueFromPipeline = true, Mandatory = true)]
public IDictionary Props { get; set; }