使用where-object

时间:2017-05-24 19:06:51

标签: powershell

我想使用Where-Object来简化我的代码并使用powershell函数。

考虑这两个列表

$list = @('A','B','C')
$list2=@{'A'=1;'B'=2;'E'=3}

我想要做的是在$ list中查找$ list2中所有键的项目。我可以用正常的琐碎方式做到这一点。

$r = @()
foreach ($t in $list)
{
  $t
  if ($list2.ContainsKey($t))
  { 
     $r+=$t
     }
}

上面的代码有效,但是当我发出以下命令时

$r = $list | Where-Object $list2.Keys.contains($_)

Powershell并不高兴,并表示该方法不受支持。我认为这应该是可以实现的,但我不知道如何发出正确的命令。如果这是可行的,请提供帮助,因为我的脚本似乎过于冗长。

1 个答案:

答案 0 :(得分:1)

您需要在Where-Object {}中包含您正在评估的条件,以评估为ScriptBlock。其次,contains()方法将为$list2的每个成员返回一个布尔值,因此如果返回的数组包含值$True,您将需要评估该语句。

$r = $list | Where-Object {($list2.Keys.contains($_)) -contains $True}

或者,您可以在.contains()哈希表本身上使用$list2方法,并避免为每个键获取值。

$r = $list | Where-Object {$list2.contains($_)}