3

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

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

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

3 回答 3

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可以在检查中使用。

于 2013-08-20T15:42:17.007 回答
0

你试过Compare-Object $ServerList1 $ServerList2吗?

于 2013-08-20T16:11:16.797 回答
0

要遍历哈希,请将哈希变量的.Keys属性通过管道传递到Foreach-Object循环:

$MyHash.Keys | %{
  [...code...]
}

在循环中,$_被设置为每个键名。要访问循环中的值,请使用$MyHash.$_,例如,您可以测试if ($MyHash.$_ -ne $SomeVariable) { [...do something...]}

这就是循环哈希的方法。我将留给您使用您喜欢的任何逻辑来确定这些值是否都相同。如果您在执行此操作时遇到问题,请发布代码并解释它的问题所在。

警告:如果您在循环遍历正在修改的哈希时尝试添加或删除哈希元素,您将收到错误消息。它不适用于这种特殊情况,但在遍历散列时需要注意。

于 2013-08-20T15:33:54.633 回答