給定一個包含一些重複項目的列表,我可以使用Group-Object -AsHashtable
並得到一個哈希表,該表似乎包含帶有項目名稱的鍵,而該值是我無法識別的。
所以,給定
$array = [System.Collections.Generic.List[String]]@('A', 'B', 'C', 'B', "c", 'C')
$grouped = $array | Group-Object -AsHashTable
$grouped
將會
Name Value
---- -----
A {A}
B {B, B}
C {C, c, C}
在這一點上,我會認為$grouped['B'].Count
或$grouped.'B'.Count
會產生正確的計數 2。但我得到 0。我錯過了什麼?
您在Windows PowerShell中看到一個錯誤,該錯誤已在PowerShell (Core) 7+ 中修復-有關詳細信息,請參閱GitHub 問題 #6933。
解決方法:在 Windows PowerShell 中,始終-AsHashTable
與組合-AsString
,即使輸入對像或分組屬性值已經是字符串。向亞伯拉罕·齊納拉致敬。
# Note: .B.Count is equivalent to ['B'].Count
PS> ('A', 'B', 'C', 'B', "c", 'C' | Group-Object -AsHashTable -AsString).B.Count
2 # OK, thanks to -AsString (not necessary in PowerShell 7+)
這繞過了該錯誤,否則該錯誤表現如下:旨在成為哈希表鍵的字符串意外地包裝在不可見的[psobject]
包裝器中,從而阻止了基於字符串的鍵查找。
(在 Windows PowerShell 中('A', 'B', 'C', 'B', "c", 'C' | Group-Object -AsHashTable).B
產生$null
。)
注意:這意味著如果您希望鍵為字符串以外的數據類型(例如),則不能-AsHashtable
在 Windows PowerShell 中使用[int]
,因為對於此類數據類型,[psobject]
無法繞過不可見包裝。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句