3

ハッシュテーブルをループして、すべての値が同じであることを確認するにはどうすればよいですか?

Active Directory クエリからハッシュテーブルを返すスクリプトがあります。各サーバーから返される値は同じでなければならないので、すべての値が同じ場合は 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

ハッシュをループするには、ハッシュ変数の.KeysプロパティをForeach-Objectループにパイプします。

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

ループ内では、各キー名に$_が設定されます。ループ内で値にアクセスするには、を使用します。$MyHash.$_たとえば、テストできますif ($MyHash.$_ -ne $SomeVariable) { [...do something...]}

これがハッシュをループする方法です。値がすべて同じかどうかを判断するために好きなロジックを使用することは、あなたに任せます。これで問題が発生した場合は、コードを投稿して、何が機能していないかを説明してください。

警告:変更中のハッシュをループしている間にハッシュ要素を追加または削除しようとすると、エラーが発生します。この特定のケースには当てはまりませんが、ハッシュのループに関しては注意が必要です。

于 2013-08-20T15:33:54.633 に答える
0

試しましたCompare-Object $ServerList1 $ServerList2か?

于 2013-08-20T16:11:16.797 に答える