我用C#编写了一个小的PowerShell cmdlet,它期望使用Dictionary的参数。如何在PowerShell脚本中构造HashTable(或其他对象),以便可以将其作为参数传递给cmdlet?
我尝试如下在PowerShell脚本中创建HashTable:
$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);
}
}
我希望能够编写一个简短的PowerShell脚本,如下所示:
$dic = @{
"Key1" = 1,2,3;
"Key2" = "A","B","C";
}
$props | Add-Properties
但是,当我尝试此操作时,出现此错误:
输入对象不能绑定到该命令的任何参数,因为该命令不接受管道输入,或者该输入及其属性与接受管道输入的任何参数都不匹配
我检查了$props
的类型,它的确是HashTable
。在查看了与该管道输入问题有关的其他问题以及如何在PowerShell中构建HashTable
之后,我仍然对这里出了什么问题感到茫然。
答案 0 :(得分:4)
如果您不想将类型更改为<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
,则可以使用接口来解决此问题:
Hashtable
PS> [hashtable].GetInterfaces()
IsPublic IsSerial Name
-------- -------- ----
True False IDictionary
True False ICollection
True False IEnumerable
True False ISerializable
True False IDeserializationCallback
True False ICloneable