c# - 如何通过管道将哈希表传递给期望字典的 cmdlet?
问题描述
我在 C# 中编写了一个小的 PowerShell cmdlet,它需要一个字典的参数。如何在 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
. 在查看了与此管道输入问题以及如何HashTable
在 PowerShell 中构建相关的其他问题之后,我仍然不知道这里出了什么问题。
解决方案
如果您不想将类型更改为,则可以使用接口解决此问题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
[Parameter(ValueFromPipeline = true, Mandatory = true)]
public IDictionary Props { get; set; }
推荐阅读
- angular - 当我们保存文本框值时,如何以角度保存上传的文件?
- apache-spark - 如何在执行 spark pgm 时指定 spark.authenticate.secret 值
- java - 无法用java替换html字符串中的某些文本
- php - 将 Informix 与 Laravel 连接起来
- vulkan - MoltenVK 驱动程序为某些 Vulkan 函数调用调用了错误的函数
- ruby-on-rails - puma 服务器在没有日志的情况下在生产中静默崩溃?
- css - NodeJS Babel 服务器上的内联 CSS
- php - 为什么已发布的会议不出现?
- mysql - 在下拉列表中排除状态
- typescript - vue 和 firebase api 中的打字稿错误