将powershell管道类型更改为哈希表(或任何其他可枚举类型)

Tho*_*fer 6 powershell pipeline hashtable cmdlet

我喜欢编写一个cmdlet"Convert-ToHashTable",它执行以下任务:

$HashTable = Import-Csv Table.csv | Convert-ToHashTable
Run Code Online (Sandbox Code Playgroud)

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

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

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

Bar*_*ekB 9

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

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

不要认为需要任何"改变管道类型"的魔法,说实话......?


Ste*_*enD 6

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

$Out = @{}
Import-Csv Table.csv | %{ $Out[$_.Key] = $_.Value }
Run Code Online (Sandbox Code Playgroud)

这使得 $Out 设置为值的哈希表,而不是转换管道以生成哈希表。但是您当然可以将 $Out 通过管道传输到其他内容中。

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