Как получить уникальные значения в моем system.array?

Как мне получить уникальные значения в моем массиве ниже?

$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

🤔 А знаете ли вы, что...
PowerShell предоставляет доступ к средствам шифрования для обеспечения безопасности данных.


1
50
2

Ответы:

Решено

Вы можете использовать Sort-Object -Unique:

$serverenv |
    Where-Object { -not [string]::IsNullOrWhiteSpace($_.env) } |
    Sort-Object computername, env -Unique

Вам следует сгруппировать все элементы по одному и тому же имени свойства. Затем для каждой одноименной группы выбрать только один объект, используя...

$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
}