Powershell选择唯一字段

Powershell选择唯一字段,powershell,unique,select-object,Powershell,Unique,Select Object,我有一个包含一些字段的对象列表。例如,我的列表中有三个对象: Field1 = "aaa" Field2 = 123 Field3 = "ccc" Field1 = "bbb" Field2 = 123 Field3 = "ddd" Field1 = "eee" Field2 = 123 Field3 = "ccc" 我需要按如下方式筛选此列表: 我必须获取对Field2-Field3的所有唯一匹配项。字段1的值是不必要的 在我的示例中,选择的结果必须删除第三个对象,因为Field2和

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

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

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

Field1 = "eee"
Field2 = 123
Field3 = "ccc"
我需要按如下方式筛选此列表:

  • 我必须获取对Field2-Field3的所有唯一匹配项。字段1的值是不必要的
在我的示例中,选择的结果必须删除第三个对象,因为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

可以使用表达式:

$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

我听不懂你的表达方式,似乎对我的代码不起作用。我还需要从我的对象列表中选择Field1。ContainesKey方法不存在。我在这条线上收到一个错误。不确定你当时在做什么。ContainsKey无疑是散列上的一个有效方法。请用您正在运行的实际代码更新您的问题。@maures编辑为仅获取字段1值我已尝试使用
选择对象-唯一字段2,字段3
,但不过滤任何内容。你能演示一下这个吗?我在你发布的代码中没有看到
$result=@{}
。你说得对。现在它可以工作了,但我的输出是:Name:Field2-Field3 Value:all-my-object字段和值如何只选择我需要的字段?