微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取只有一个键/值的哈希表的计数

如何解决获取只有一个键/值的哈希表的计数

我有一个 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 不是哈希表,所以我在它前面加上了 @($result).count。感谢@Theo 和@Lee_Dailey

,

您看到的是 Windows PowerShell 中的错误(截至最新和最终版本,5.1),此后已在 PowerShell (Core) 中更正 - 请参阅 GitHub issue #3671 以获取原始错误报告。

也就是说,因为 v3 所有对象都应该有一个 intrinsic .Count 属性,而不仅仅是 collections,为了统一处理标量和集合 - 有关详细信息,请参阅 this answer

Windows PowerShell解决方法确实是强制一个值成为数组 通过 @(...)array-subexpression operator,它保证具有 .Count 属性,如您的答案所示,但 不应该是必需的,并且确实在 PowerShell 中不再需要(核心,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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。