如何循环哈希表以验证所有值是否相同?
我有一个脚本,它从活动目录查询中返回一个哈希表。从每个服务器返回的值应该相同,所以如果所有值都相同,我想返回true,如果任何值与其他值不匹配,则返回false。理想情况下,即使添加第4或第5台服务器而不需要更新脚本,这也可以工作。
Name Value
---- -----
server1 0
server2 0
server3 0
答案 0 :(得分:4)
不是最有效的方法,但非常简单的是@($h.Values | Group-Object).Count -eq 1
。
示例:
# all the same
$h = @{ server1=0; server2=0; server3=0 }
# gets True
@($h.Values | Group-Object).Count -eq 1
# different
$h = @{ server1=0; server2=0; server3=1 }
# gets False
@($h.Values | Group-Object).Count -eq 1
特殊情况是如何处理包含0个项目的表。例如。如果它意味着全部相同,则可以在检查中使用-le 1
。
答案 1 :(得分:0)
要遍历哈希,将哈希变量的 .Keys 属性传递给 Foreach-Object 循环:
$MyHash.Keys | %{
[...code...]
}
在循环中, $ _ 设置为每个键名。要访问循环中的值,请使用$MyHash.$_
,例如,您可以测试if ($MyHash.$_ -ne $SomeVariable) { [...do something...]}
这是循环哈希的方法。我会留给你使用你喜欢的任何逻辑来确定值是否都是相同的。如果你遇到这样的问题,请发布代码并解释什么不起作用。
警告:如果您在修改正在修改的哈希时尝试添加或删除哈希元素,则会出现错误。它不适用于这种特殊情况,但是关于循环哈希值的注意事项。
答案 2 :(得分:0)
您是否尝试过Compare-Object $ServerList1 $ServerList2
?