如何从值中检索HashTable密钥?

时间:2015-05-14 22:18:43

标签: powershell

我有一个包含一组键值对的PowerShell HashTable(当然)。所有HashTable值都是唯一的。

我想使用PowerShell根据我指定的值检索HashTable密钥。

2 个答案:

答案 0 :(得分:3)

另一种选择:

  • 迭代HashTable键并找到包含该键的键 值:
     $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键。

第二个参数支持的所有值如下:

  • 默认
  • 第一
  • 最后
  • SkipUntil
  • 直到
  • 分割
$HashTable = @{
    1 = 10;
    2 = 20;
    3 = 30;
}

$Val = 30;
$HashTable.Keys.Where({ $HashTable[$PSItem] -eq $Val; }, [System.Management.Automation.WhereOperatorSelectionMode]::First);