我喜欢编写一个cmdlet“Convert-ToHashTable”,它执行以下任务:
$HashTable = Import-Csv Table.csv | Convert-ToHashTable
Import-csv在管道上放置一个数组,如何将其更改为Convert-ToHashTable cmdlet中的哈希表?在cmdlet的Process部分中,我可以访问元素,但我不知道如何更改管道本身的类型
过程 { Write-Verbose“Process $($ myinvocation.mycommand)” $ CurrentInput = $ _ ... }
有没有办法将完整的哈希表作为新管道返回或创建一个带有类型哈希表的新管道?
答案 0 :(得分:9)
您打算将什么用作哈希表的键?除此之外,即使使用简单的foreach-object也应该很容易做到:
Import-Csv Table.csv | Foreach-Object -begin {
$Out = @{}
} -process {
$Out.Add('Thing you want to use as key',$_)
} -end {
$Out
}
不要认为需要任何“改变管道类型”的魔法,说实话......?
答案 1 :(得分:1)
另一种可能性是使用更紧凑的foreach形式:
$Out = @{}
Import-Csv Table.csv | %{ $Out[$_.Key] = $_.Value }
将$ Out设置为值的哈希表,而不是转换管道以生成哈希表。但是你当然可以将$ Out输入其他东西。
另请注意,$ Out.Add(x,y)和$ Out [x] = y之间存在细微差别。如果元素已经存在,前者抛出异常,后者替换它。