获取其中只有一个键/值的哈希表的计数
Posted
技术标签:
【中文标题】获取其中只有一个键/值的哈希表的计数【英文标题】:Getting the count of a hashtable that only has one key/value in it 【发布时间】:2021-09-21 18:33:09 【问题描述】:我有一个 foreach 循环,目前在我的哈希表中放入三个条目:
$result = foreach($key in $serverSpace.Keys)
if($serverSpace[$key] -lt 80)
[pscustomobject]@
Server = $key
Space = $serverSpace[$key]
当我使用时
$result.count
我按预期得到了 3 个。 我更改了 foreach 循环以排除小于或等于 1 的条目使用
$result = foreach($key in $serverSpace.Keys)
if($serverSpace[$key] -lt 80 -and $serverSpace[$key] -gt 1)
[pscustomobject]@
Server = $key
Space = $serverSpace[$key]
$result.count 应该有 1 作为其输出,但它不会将 .count 识别为建议的命令,并且 $result.count 不再输出任何内容。我假设当哈希表中只有一个条目时它不允许计数?不确定发生了什么,但我的脚本条件取决于 $result 的计数。任何帮助将不胜感激。
【问题讨论】:
强制为数组:@($result).count
[1] PSCO 不是哈希表。 [grin] [2] 如果您希望单个对象具有.Count
属性,则需要将该对象放入一个集合中。最简单的方法是在 $Var 名称前加上 [array]
。
哦,哇,我很笨。这就说得通了。谢谢你们俩
这能回答你的问题吗? Powershell being too clever
术语说明:foreach
循环返回的是一个或多个自定义对象([pscustomobject]
实例),而不是hashtables。
【参考方案1】:
$result 不是哈希表,所以我在它前面加上了@($result).count。感谢@Theo 和@Lee_Dailey
【讨论】:
【参考方案2】:您看到的是 Windows PowerShell 中的一个错误(截至最新的和最终版本, 5.1),此后已在 PowerShell (Core) 中更正 - 请参阅 GitHub issue #3671 以获取原始错误报告。
也就是说,从 v3 开始,所有对象都应该有一个intrinsic.Count
属性,而不仅仅是集合,这是为了标量和集合的统一处理 - 请参阅 this answer 了解更多信息。
Windows PowerShell 的解决方法确实是通过@(...)
强制将值设为数组 ,array-subexpression operator,保证具有.Count
属性,如您的答案所示,但它不应该是必需的,实际上在 PowerShell (Core, v6+)
# !! Due to a BUG, this outputs $null in *Windows PowerShell*,
# !! but correctly outputs 1 in PowerShell (Core).
([pscustomobject] @).Count
# Workaround for Windows PowerShell that is effective in *both* editions,
# though potentially wasteful in PowerShell (Core):
@([pscustomobject] @).Count
【讨论】:
以上是关于获取其中只有一个键/值的哈希表的计数的主要内容,如果未能解决你的问题,请参考以下文章