Powershell 如何从值中检索哈希表键?

Powershell 如何从值中检索哈希表键?,powershell,Powershell,我有一个PowerShell哈希表,其中包含一组键值对(自然)。所有哈希表值都是唯一的 我想使用PowerShell根据我指定的值检索哈希表键。您可以使用PowerShell 4.0的Where方法语法来实现这一点。Where方法接受PowerShellScriptBlock,以查找与指定条件匹配的对象。我们可以迭代哈希表键并找到包含所需值的键 如果您确实有一个具有重复哈希表值的场景,您可以选择指定第二个参数,类型为WhereOperatorSelectionMode,该参数指定调用where方

我有一个PowerShell哈希表,其中包含一组键值对(自然)。所有哈希表值都是唯一的


我想使用PowerShell根据我指定的值检索哈希表键。

您可以使用PowerShell 4.0的Where方法语法来实现这一点。Where方法接受PowerShell
ScriptBlock
,以查找与指定条件匹配的对象。我们可以迭代哈希表键并找到包含所需值的键

如果您确实有一个具有重复哈希表值的场景,您可以选择指定第二个参数,类型为
WhereOperatorSelectionMode
,该参数指定调用where方法应返回哪些对象。通过为第二个方法参数指定
First
,我们可以确保只返回一个哈希表键

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

  • 违约
  • 首先
  • 最后
  • 技巧
  • 直到
  • 分裂

其他选择:

  • 迭代哈希表键并查找包含 值:
    $HashTable.Keys |?{$HashTable[$\]-eq$Val}
  • 要使用
    GetEnumerator()
    函数进行迭代:

    $HashTable.GetEnumerator()|?{$\.Value-eq$Val}{$\.Key}

但在这个问题上,@Vadim提供了唯一清晰而全面的答案
$HashTable = @{
    1 = 10;
    2 = 20;
    3 = 30;
}

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