如何解决获取只有一个键/值的哈希表的计数
我有一个 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 举报,一经查实,本站将立刻删除。