2012-06-01 28 views
4

我喜歡寫cmdlet的「轉換-ToHashTable」執行以下任務:更改PowerShell管道類型哈希表(或任何其它可枚舉類型)

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

進口CSV地在管道上的數組,如何我可以將其更改爲我的Convert-ToHashTable cmdlet中的散列表嗎?在cmdlet的過程的一部分,我可以訪問的內容,但我不知道如何改變管道本身

過程 { 寫詳細「過程$($ myinvocation.mycommand)」 的類型$ CurrentInput = $ _ ... }

有沒有辦法返回一個完整的散列表作爲新的管道或創建一個新的類型散列表的管道?

回答

9

你打算用什麼作爲散列表的鍵?除此之外,它應該是很容易做到,即使簡單的foreach對象:

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

沒有看到需要的任何「改變管道式」的魔法,誠實......?

1

另一種可能是使用的foreach的更緊湊的形式:

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

一套葉$輸出價值觀的哈希表,而不是轉換管道產生哈希表。但是,你當然可以把$ Out變成別的東西。

另請注意,$ Out.Add(x,y)和$ Out [x] = y之間存在細微的差異。如果元素已經存在,前者會拋出異常,後者會替換它。