How do I get unique values in my array below?
$serverenv = 'computername,env
server1,prod
server1,
server2,prod,
server2,prod' | convertfrom-csv
$serverenv | where-object { $_.Env -ne $null -and $_.Env -ne "" }
This is the output
computername env
------------ ---
server1 prod
server2 prod
server2 prod
This is the desired output
computername env
------------ ---
server1 prod
server2 prod
I tried
$serverenv | select Get-Unique
$serverenv | Get-Unique
1
You can use Sort-Object -Unique
:
$serverenv |
Where-Object { -not [string]::IsNullOrWhiteSpace($_.env) } |
Sort-Object computername, env -Unique
2
You should group all items by same property name.
Then for each group of same name to select only one object using…
$serverenv | Group-Object -Property 'ComputerName' | ForEach-Object {
$_.Group | Select-Object -First 1
}
If you need like to skip values with empty “env”, like you can add this logic inside the foreach scriptblock.
For example, filter all object with empty env property.
(Where object’s property env not equal null)
$serverenv | Group-Object -Property 'ComputerName' | ForEach-Object {
$_.Group | Where-Object -Property 'env' -ne $null | Select-Object -First 1
}