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