Tri d’objets

Vous pouvez organiser des données affichées pour faciliter leur analyse en utilisant l’applet de commande Sort-Object. L’applet de commande Sort-Object prend le nom d’une ou plusieurs propriétés pour trier et retourner les données triées sur les valeurs de ces propriétés.

Tri de base

Prenez le problème d’affichage des sous-répertoires et fichiers du répertoire actif. Si vous souhaitez trier sur l’état (LastWriteTime), puis sur le nom (Name), vous pouvez taper ce qui suit :

Get-ChildItem |
    Sort-Object -Property LastWriteTime, Name |
    Format-Table -Property LastWriteTime, Name
LastWriteTime          Name
-------------          ----
11/6/2017 10:10:11 AM  .localization-config
11/6/2017 10:10:11 AM  .openpublishing.build.ps1
11/6/2017 10:10:11 AM  appveyor.yml
11/6/2017 10:10:11 AM  LICENSE
11/6/2017 10:10:11 AM  LICENSE-CODE
11/6/2017 10:10:11 AM  ThirdPartyNotices
11/6/2017 10:10:15 AM  tests
6/6/2018 7:58:59 PM    CONTRIBUTING.md
6/6/2018 7:58:59 PM    README.md
...

Vous pouvez également trier les objets dans l’ordre inverse en spécifiant le paramètre de commutateur Descending.

Get-ChildItem |
  Sort-Object -Property LastWriteTime, Name -Descending |
  Format-Table -Property LastWriteTime, Name
LastWriteTime          Name
-------------          ----
12/1/2018 10:13:50 PM  reference
12/1/2018 10:13:50 PM  dsc
...
6/6/2018 7:58:59 PM    README.md
6/6/2018 7:58:59 PM    CONTRIBUTING.md
11/6/2017 10:10:15 AM  tests
11/6/2017 10:10:11 AM  ThirdPartyNotices
11/6/2017 10:10:11 AM  LICENSE-CODE
11/6/2017 10:10:11 AM  LICENSE
11/6/2017 10:10:11 AM  appveyor.yml
11/6/2017 10:10:11 AM  .openpublishing.build.ps1
11/6/2017 10:10:11 AM  .localization-config

Utilisation des tables de hachage

Vous pouvez trier différentes propriétés selon divers ordres à l’aide de tables de hachage dans un tableau. Chaque table de hachage utilise une clé Expression pour spécifier le nom de la propriété comme chaîne, ainsi qu’une clé Ascending ou Descending pour spécifier l’ordre de tri par $true ou $false. La clé Expression est obligatoire. La clé Ascending (Croissant) ou Descending (Décroissant) est facultative.

L’exemple suivant trie les objets par ordre décroissant LastWriteTime et par ordre croissant Name.

Get-ChildItem |
  Sort-Object -Property @{ Expression = 'LastWriteTime'; Descending = $true },
                        @{ Expression = 'Name'; Ascending = $true } |
  Format-Table -Property LastWriteTime, Name
LastWriteTime          Name
-------------          ----
12/1/2018 10:13:50 PM  dsc
12/1/2018 10:13:50 PM  reference
11/29/2018 6:56:01 PM  .openpublishing.redirection.json
11/29/2018 6:56:01 PM  gallery
11/24/2018 10:33:22 AM developer
11/20/2018 7:22:19 PM  .markdownlint.json
...

Vous pouvez également définir un bloc de script avec la clé Expression. Lorsque vous exécutez l’applet de commande Sort-Object, le bloc de script est exécuté et le résultat sert pour le tri.

L’exemple suivant trie les objets par ordre décroissant en fonction de l’intervalle de temps entre CreationTime et LastWriteTime.

Get-ChildItem |
    Sort-Object -Property @{ Exp = { $_.LastWriteTime - $_.CreationTime }; Desc = $true } |
    Format-Table -Property LastWriteTime, CreationTime
LastWriteTime          CreationTime
-------------          ------------
12/1/2018 10:13:50 PM  11/6/2017 10:10:11 AM
12/1/2018 10:13:50 PM  11/6/2017 10:10:11 AM
11/7/2018 6:52:24 PM   11/6/2017 10:10:11 AM
11/7/2018 6:52:24 PM   11/6/2017 10:10:15 AM
11/3/2018 9:58:17 AM   11/6/2017 10:10:11 AM
10/26/2018 4:50:21 PM  11/6/2017 10:10:11 AM
11/17/2018 1:10:57 PM  11/29/2017 5:48:30 PM
11/12/2018 6:29:53 PM  12/7/2017 7:57:07 PM
...

Conseils

Vous pouvez omettre le nom du paramètre Property comme suit :

Sort-Object LastWriteTime, Name

En outre, vous pouvez faire référence à Sort-Object en utilisant son alias intégré, sort :

sort LastWriteTime, Name

Les clés de tri figurant dans les tables de hachage peuvent être abrégées comme suit :

Sort-Object @{ e = 'LastWriteTime'; d = $true }, @{ e = 'Name'; a = $true }

Dans cet exemple, la lettre e signifie Expression, d signifie Descending (décroissant) et a signifie Ascending (croissant).

Pour améliorer la lisibilité, vous pouvez placer les tables de hachage dans une variable distincte :

$order = @(
  @{ Expression = 'LastWriteTime'; Descending = $true }
  @{ Expression = 'Name'; Ascending = $true }
)

Get-ChildItem |
    Sort-Object $order |
    Format-Table LastWriteTime, Name