首页 > 解决方案 > Powershell比较问题

问题描述

我有 2 个变量要比较。$Variable1 包含 3 列数据,$Variable2 包含 1 列数据。

我需要将 $Variable1 的 column1 与 $Variable2 进行比较。如果匹配,我想返回 $Variable1 的值(所有列)。

最初,我尝试过:

$Variable1 -match $Variable2 它可以工作,但它返回的数据太多,我只想要一个完全匹配。

所以然后我尝试了 $Variable1 -eq $Variable2 并且它没有返回任何东西。但是如果我使用 $Variable1.Column1 -eq $Variable2,那么它会返回我想要的确切数据。但在这里,问题在于它只返回 $Variable1 的 Column1 并且我想要该特定数据行的 $Variable1 的所有列。我应该在这里做什么?

标签: powershellcompare

解决方案


您可以将Where-Object(alias where) 与运算符结合使用来实现此结果。

$variable1 | where column1 -in $variable2

您可能还会看到上面用脚本块表示法编写的:

$variable1 | Where-Object { $_.column1 -in $variable2 }

当您要根据值列表过滤特定值时,此方法有效。如果$variable2始终是单个值,则可以-eq改用。您必须将具有所需所有可能属性的对象发送到管道中,然后根据需要过滤对象值。如果在过滤之前将对象限制为一列/属性,则只会输出该一列的过滤版本。


上面的场景假设一个类似于下面的数据集:

$var1 = [pscustomobject]@{c1=1;c2=2;c3=3},
        [pscustomobject]@{c1=2;c2=4;c3=6},
        [pscustomobject]@{c1=1;c2=6;c3=9},
        [pscustomobject]@{c1=6;c2=12;c3=13}
$var1 # array of objects with 3 properties

c1 c2 c3
-- -- --
 1  2  3
 2  4  6
 1  6  9
 6 12 13

$var2 # array of data

1
2
3

$var1 | where c1 -in $var2

c1 c2 c3
-- -- --
 1  2  3
 2  4  6
 1  6  9

推荐阅读