PowerShell - Trier avec Sort-Object

Pour me soutenir, vous pouvez vous abonner à la chaîne, partager et liker les vidéos, désactiver votre bloqueur de pub ou encore faire un don. Merci!

Bonjour,

Sort-Object permet de trier et aussi de filtrer les valeurs uniques.

La cmdlet propose des options de trie que vous n’avez peut être pas pris le temps d’explorer.

En voici un récapitulatif :

# Classer les processus par ordre ascendant en fonction de la propriété cpu
Get-Process | Sort-Object -Property cpu
# Classer les processus par ordre descendant en fonction de la propriété cpu
Get-Process | Sort-Object -Property name -descending
# Classer les processus par ordre descendant en fonction de la propriété name puis par propriété cpu (pour les processus avec le même nom)
Get-Process | Sort-Object -Property name, cpu -descending
# Classer les processus par ordre ascendant en fonction de la propriété name puis par propriété cpu (pour les processus avec le même nom) en ordre descendant
Get-Process | Sort-Object -Property @{ Expression = "Name"; Descending = $true },
@{ Expression = "DisplayName"; Ascending = $true }
# Trier les objets en fonction du résultat d'un scriptblock (dans l'exemple en fonction de la durée entre la date de création et de dernière modification)
Get-ChildItem |
Sort-Object -Property @{ Expression = { $_.LastWriteTime - $_.CreationTime }; Descending = $true } |
select-object -Property LastWriteTime, CreationTime
# Convertir le type d'objet pour changer le comportement de tri de Sort-Object
# Création d'un array contenant des valeurs chaines
[string[]]$array = 9,10,9999,88888,789,2
$array | Sort-Object
# Demander à Sort-Object de trier les objets via un type particulier, [INT] dans mon exemple
$array | Sort-Object -Property { [int]$_ }
# Autre exemple avec un type [DateTime]
'Aug 16, 2022', 'Feb 1, 1992', 'June 15, 1980' | Sort-Object
'Aug 16, 2022', 'Feb 1, 1992', 'June 15, 1980' | Sort-Object -Property { [DateTime]$_ }
# Autre exemple avec un type [version]
'11.12.13.14', '234.56.78. 10', '5.5.5.5' | Sort-Object
'11.12.13.14', '234.56.78. 10', '5.5.5.5' | Sort-Object -Property { [version]$_ }
# Conserver les valeurs uniques (supprimer les doublons) sans sensibilité à la casse
'localhost','LOCALHOST','pc1','pc2','localhost','LOCALHOST' | Sort-Object -Unique
# Conserver les valeurs uniques (supprimer les doublons) avec sensibilité à la casse
'localhost','LOCALHOST','pc1','pc2','localhost','LOCALHOST' | Sort-Object -Unique -CaseSensitive
# Ranger de manière aléatoire
1..10 | Sort-Object -Property { Get-Random }
# Supprimer les doublons avec sensibilité à la casse
$array = 'C', 'A', 'B', 'C', 'c', 'C'
$array | Sort-Object -Unique -CaseSensitive
# Supprimer les doublons sans sensibilité à la casse
$array = 'C', 'A', 'B', 'C', 'c', 'C'
$array | Sort-Object -Unique
# Trier des valeurs dans un ordre voulu (dans l'exemple par nom de couleur, rouge puis vert et enfin bleu)
$DemoSort = @(
[PSCustomObject]@{ Couleur = 'Rouge'; Valeur = 8 }
[PSCustomObject]@{ Couleur = 'Bleu'; Valeur = 9 }
[PSCustomObject]@{ Couleur = 'Vert'; Valeur = 10 }
[PSCustomObject]@{ Couleur = 'Bleu'; Valeur = 11 }
[PSCustomObject]@{ Couleur = 'Vert'; Valeur = 12 }
)
$DemoSort | Sort-Object {
switch ($_.Couleur) {
'Rouge' { 1 }
'Vert' { 2 }
'Bleu' { 3 }
}
}
# Les éléments équivalents sont rangés dans l'ordre d'arrivée (Powershell 7)
1..20 | Sort-Object {$_ % 3}
1..20 | Sort-Object {$_ % 3} -Stable
# N'afficher que les 6 premiers (Powershell 7, inclus -stable)
1..20 | Sort-Object -Top 6
# N'afficher que les 6 derniers (Powershell 7, inclus -stable)
1..20 | Sort-Object -bottom 6

Liens en relation