Partager via


Tri d’objets

Nous pouvons organiser les données affichées pour en faciliter la consultation à l'aide de la cmdlet Sort-Object. Sort-Object prend le nom d’une ou plusieurs propriétés à trier et retourne les données triées par les valeurs de ces propriétés.

Tri de base

Considérez le problème de la liste des sous-répertoires et des fichiers dans le répertoire actif. Si nous voulons trier par LastWriteTime , puis par Nom, nous pouvons le faire en tapant :

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 décroissant[switch] .

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 de tables de hachage

Vous pouvez trier différentes propriétés dans différents 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é sous forme de chaîne et une clé croissant ou décroissante pour spécifier l’ordre de tri par $true ou $false. La clé Expression est obligatoire. La touche Croissant ou Décroissant est facultative.

L’exemple suivant trie les objets dans l’ordre LastWriteTime décroissant et l’ordre de nom croissant.

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 scriptblock sur la clé Expression . Lors de l’exécution de l’applet Sort-Object de commande, le scriptblock est exécuté et le résultat est utilisé pour le tri.

L’exemple suivant trie les objets dans l’ordre décroissant selon 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 vous référer à Sort-Object par son alias intégré, sort.

sort LastWriteTime, Name

Les clés des tables de hachage pour le tri peuvent être abrégées comme suit :

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

Dans cet exemple, l’e signifie Expression, le d signifie Descendant, et l’a signifie 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