Как мне получить уникальные значения в моем массиве ниже?
$serverenv = 'computername,env
server1,prod
server1,
server2,prod,
server2,prod' | convertfrom-csv
$serverenv | where-object { $_.Env -ne $null -and $_.Env -ne "" }
Это результат
computername env
------------ ---
server1 prod
server2 prod
server2 prod
Это желаемый результат
computername env
------------ ---
server1 prod
server2 prod
Я пытался
$serverenv | select Get-Unique
$serverenv | Get-Unique
Вы можете использовать Sort-Object -Unique
:
$serverenv |
Where-Object { -not [string]::IsNullOrWhiteSpace($_.env) } |
Sort-Object computername, env -Unique
Для этого подойдет просто $serverenv | Sort-Object computername -Unique
.
зависит от того, имеет ли env
значения, отличные от prod
, или пусто. вопрос не ясен @iRon
Вам следует сгруппировать все элементы по одному и тому же имени свойства. Затем для каждой одноименной группы выбрать только один объект, используя...
$serverenv | Group-Object -Property 'ComputerName' | ForEach-Object {
$_.Group | Select-Object -First 1
}
Если вам нужно пропускать значения с пустым «env», вы можете добавить эту логику внутри блока сценария foreach.
Например, отфильтруйте все объекты с пустым свойством env. (Где свойство объекта env не равно нулю)
$serverenv | Group-Object -Property 'ComputerName' | ForEach-Object {
$_.Group | Where-Object -Property 'env' -ne $null | Select-Object -First 1
}
Примечание: при сравнении с
$null
лучше иметь$null
слева от сравнения:$null -ne $_.env
в вашем примере. Потому что Powershell может использовать MAGIC для попытки преобразовать правый элемент в тип левого, что может иметь непредвиденный эффект (пустая строка НЕ является$null
)