Powershell选择独特的领域

时间:2018-04-06 13:35:43

标签: powershell unique select-object

我有一些带有某些字段的对象列表。例如,我的列表中有三个对象:

Field1 = "aaa"
Field2 = 123
Field3 = "ccc"

Field1 = "bbb"
Field2 = 123
Field3 = "ddd"

Field1 = "eee"
Field2 = 123
Field3 = "ccc"

我需要像这样过滤这个列表:

  • 我必须采用对Field2-Field3的所有唯一出现。 Field1的值是不必要的。

在我的示例中,选择的结果必须删除第三个对象,因为在Field2和Field3上具有相同的值。

我尝试使用Select-Object -Unique Field2, Field3,但没有过滤任何内容。

我也尝试使用Where-Object同样的否定结果。

有什么想法吗?我正在使用旧版本的powershell,因此我无法使用某些cmdlet。

谢谢。

这是代码:它可以工作,但我需要在输出中获得Field1

$result = @{}
 foreach($item in $myList) {
       $combined = '{0}-{1}' -f $item.Field2, $item.Field3
       if($result.ContainsKey($combined) -eq $false) {
          $result[$combined] = $item
       }
    }
    $result.Values

1 个答案:

答案 0 :(得分:1)

您可以使用表达式:

$objects | Select -Unique @{n='Combined'; e={'{0}-{1}' -f $_.Field2, $_.Field3}}

这是使用哈希的另一种方式:

$result = @{}
foreach($item in $objects){
    $combined = '{0}-{1}' -f $item.Field2, $item.Field3
    if($result.ContainsKey($combined) -eq $false){
        $result[$combined] = $item
    }
}
$result.Values | Select Field1