Comment supprimer les doublons d'un tableau PowerShell ?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Comment supprimer les doublons d'un tableau PowerShell ?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Utilice Select-Object
(dont l'alias est select
) avec le -Unique
interrupteur ; par exemple :
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
$a = $a | select -Unique
C'était trop facile :-(. Dans PowerShell 2, vous pouvez également utiliser Get-Unique
(ou gu
) si votre tableau est déjà trié.
Cool, cela fonctionne bien, juste une note, si vous voulez être concis, il pourrait être raccourci même à -u
. select -u
Je l'utiliserais sur une ligne de commande, mais si elle est écrite dans un code, il est suggéré d'utiliser la formulation complète de PS : Select-Object -Unique
Une autre option consiste à utiliser Sort-Object
(dont l'alias est sort
(mais seulement sous Windows) avec la fonction-Unique
qui combine le tri et la suppression des doublons :
$a | sort -unique
Notez que cela ne préserve pas l'ordre des éléments, par ex. @("B", "a", "A") | sort -unique
produit A B
.
Si vous voulez être totalement à l'abri des bombes, c'est ce que je vous conseille :
@('Apples', 'Apples ', 'APPLES', 'Banana') |
Sort-Object -Property @{Expression={$_.Trim()}} -Unique
Sortie :
Apples
Banana
Cela utilise le Property
au premier paramètre Trim()
les chaînes de caractères, de sorte que les espaces supplémentaires sont supprimés, puis ne sélectionne que les éléments suivants -Unique
valeurs.
Plus d'informations sur Sort-Object
:
Get-Help Sort-Object -ShowWindow
C'est ainsi que vous obtenez l'unique d'un tableau avec deux propriétés ou plus. Le tri est vital et la clé pour que cela fonctionne correctement. Sinon, vous n'obtiendrez qu'un seul élément.
PowerShell script :
$objects = @(
[PSCustomObject] @{ Message = "1"; MachineName = "1" }
[PSCustomObject] @{ Message = "2"; MachineName = "1" }
[PSCustomObject] @{ Message = "3"; MachineName = "1" }
[PSCustomObject] @{ Message = "4"; MachineName = "1" }
[PSCustomObject] @{ Message = "5"; MachineName = "1" }
[PSCustomObject] @{ Message = "1"; MachineName = "2" }
[PSCustomObject] @{ Message = "2"; MachineName = "2" }
[PSCustomObject] @{ Message = "3"; MachineName = "2" }
[PSCustomObject] @{ Message = "4"; MachineName = "2" }
[PSCustomObject] @{ Message = "5"; MachineName = "2" }
[PSCustomObject] @{ Message = "1"; MachineName = "1" }
[PSCustomObject] @{ Message = "2"; MachineName = "1" }
[PSCustomObject] @{ Message = "3"; MachineName = "1" }
[PSCustomObject] @{ Message = "4"; MachineName = "1" }
[PSCustomObject] @{ Message = "5"; MachineName = "1" }
[PSCustomObject] @{ Message = "1"; MachineName = "2" }
[PSCustomObject] @{ Message = "2"; MachineName = "2" }
[PSCustomObject] @{ Message = "3"; MachineName = "2" }
[PSCustomObject] @{ Message = "4"; MachineName = "2" }
[PSCustomObject] @{ Message = "5"; MachineName = "2" }
)
Write-Host "Sorted on both properties with -Unique" -ForegroundColor Yellow
$objects | Sort-Object -Property Message,MachineName -Unique | Out-Host
Write-Host "Sorted on just Message with -Unique" -ForegroundColor Yellow
$objects | Sort-Object -Property Message -Unique | Out-Host
Write-Host "Sorted on just MachineName with -Unique" -ForegroundColor Yellow
$objects | Sort-Object -Property MachineName -Unique | Out-Host
Sortie :
Sorted on both properties with -Unique
Message MachineName
------- -----------
1 1
1 2
2 1
2 2
3 1
3 2
4 1
4 2
5 1
5 2
Sorted on just Message with -Unique
Message MachineName
------- -----------
1 1
2 1
3 1
4 1
5 2
Sorted on just MachineName with -Unique
Message MachineName
------- -----------
1 1
3 2
Source : https://powershell.org/forums/topic/need-to-unique-based-on-multiple-properties/
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.