如何检查通过哈希表的内容是否匹配任何内容

时间:2014-12-19 21:37:40

标签: powershell hashtable

我有一个哈希表,我现在正试图制作一个if语句,以检查通过哈希表的内容是否匹配其中的任何内容。

$netVerConv = @{
        'v2.0' = "lib\net20";
        'v3.0' = "lib\net30";
        'v3.5' = "lib\net35";
        'v4.0' = "lib\net40";
        'v4.5' = "lib\net45";
}
$target = $netVerConv.Get_Item($netVerShort)
if () {
}

以上是我正在使用的代码区域,目标变量使用Get_Item命令通过$ netVerConv哈希表运行$ netVerShort。我已经为其构建框架的if语句将检查netVerShort是否匹配哈希表中的任何内容,如果它没有,它将停止程序,我知道如何处理简单的退出命令。

3 个答案:

答案 0 :(得分:4)

其他建议适用于您的特定方案,但通常您应该使用ContainsKey()方法查看哈希表中是否存在密钥。例如,哈希表value可以是$ null或$ false,在这种情况下,通过Get_Item()或更简单Item[$netVerShort]的结果进行测试将返回假阴性。所以我推荐这种方法来测试哈希表中是否存在密钥。你的意图也更明显:

if (!$netVerConv.ContainsKey($netVerShort) {
    ...   
}

答案 1 :(得分:1)

这个怎么样:

if( $target -eq $null ) {
    echo "Didn't Match"
    exit
}

答案 2 :(得分:0)

另一种选择:

if (-not ($target = $netVerConv.Get_Item($netVerShort)))
  { 
    Write-Error "Version $netVerShort not found"
    Exit
  }

您还可以将其重新计算为Switch

$target = 
  Switch ($netVerShort)
   {
    'v2.0'   {"lib\net20"}
    'v3.0'   {"lib\net30"}
    'v3.5'   {"lib\net35"}
    'v4.0'   {"lib\net40"}
    'v4.5'   {"lib\net45"}
    Default  {
               Write-Error "Version $netVerShort not found"
               Exit
             }
   }