我有一个包含一组键值对的PowerShell HashTable(当然)。所有HashTable值都是唯一的。
我想使用PowerShell根据我指定的值检索HashTable密钥。
答案 0 :(得分:3)
另一种选择:
$HashTable.Keys |? { $HashTable[$_] -eq $Val }
使用GetEnumerator()
函数迭代:
$HashTable.GetEnumerator() | ?{ $_.Value -eq $Val } | %{ $_.Key }
答案 1 :(得分:0)
您可以使用PowerShell 4.0的Where方法语法来实现此目的。 Where方法接受PowerShell ScriptBlock
以查找符合指定条件的对象。我们可以迭代HashTable键并找到包含所需值的键。
如果您确实遇到重复HashTable 值的情况,您可以选择指定类型为WhereOperatorSelectionMode
的第二个参数,该参数指定调用应返回哪些对象到Where方法。通过为第二个方法参数指定First
,我们可以确保只返回一个HashTable键。
第二个参数支持的所有值如下:
$HashTable = @{
1 = 10;
2 = 20;
3 = 30;
}
$Val = 30;
$HashTable.Keys.Where({ $HashTable[$PSItem] -eq $Val; }, [System.Management.Automation.WhereOperatorSelectionMode]::First);