6

我喜欢编写一个执行以下任务的 cmdlet“Convert-ToHashTable”:

$HashTable = Import-Csv Table.csv | Convert-ToHashTable

Import-csv 在管道上放置一个数组,如何在我的 Convert-ToHashTable cmdlet 中将其更改为哈希表?在 cmdlet 的 Process 部分中,我可以访问元素,但我不知道如何更改管道本身的类型

Process { Write-Verbose "Process $($myinvocation.mycommand)" $CurrentInput = $_ ... }

有没有办法将完整的哈希表作为新管道返回或创建一个具有哈希表类型的新管道?

4

2 回答 2

9

你打算用什么作为哈希表的键?除此之外,即使使用简单的 foreach-object 也应该很容易做到:

Import-Csv Table.csv | Foreach-Object -begin {
    $Out = @{}
} -process {
    $Out.Add('Thing you want to use as key',$_)
} -end {
    $Out
}

老实说,不需要任何“改变管道类型”的魔法......?

于 2012-06-01T09:26:41.247 回答
5

另一种可能性是使用更紧凑的 foreach 形式:

$Out = @{}
Import-Csv Table.csv | %{ $Out[$_.Key] = $_.Value }

这将 $Out 设置为值的哈希表,而不是将管道转换为生成哈希表。但是您当然可以将 $Out 导入其他内容。

另请注意,$Out.Add(x, y) 和 $Out[x] = y 之间存在细微差别。如果元素已经存在,前者会抛出异常,而后者会替换它。

于 2012-09-10T18:58:42.710 回答