检查相同的哈希表值

时间:2013-08-20 15:07:46

标签: powershell hashtable

如何循环哈希表以验证所有值是否相同?

我有一个脚本,它从活动目录查询中返回一个哈希表。从每个服务器返回的值应该相同,所以如果所有值都相同,我想返回true,如果任何值与其他值不匹配,则返回false。理想情况下,即使添加第4或第5台服务器而不需要更新脚本,这也可以工作。

Name                           Value
----                           -----
server1                        0
server2                        0
server3                        0

3 个答案:

答案 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