【问题标题】:Powershell compare issuePowershell比较问题
【发布时间】:2020-12-14 21:29:28
【问题描述】:

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

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

最初,我尝试过:

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

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

【问题讨论】:

    标签: powershell compare


    【解决方案1】:

    您可以将Where-Object(别名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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      • 2018-10-03
      • 2011-05-26
      • 1970-01-01
      • 2021-11-18
      相关资源
      最近更新 更多