Powershell выбрать уникальное поле

У меня есть список объектов с некоторыми полями. Например, есть три объекта из моего списка:

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, поэтому не могу использовать некоторые командлеты.

Спасибо.

Вот код: это работает, но мне нужно получить также 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 ответ

Решение

Вы можете использовать выражение:

$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
Другие вопросы по тегам