Objecten sorteren

We kunnen weergegeven gegevens organiseren om het gemakkelijker te maken om te scannen met behulp van de Sort-Object cmdlet. Sort-Object gebruikt de naam van een of meer eigenschappen om op te sorteren en retourneert gegevens die zijn gesorteerd op de waarden van deze eigenschappen.

Basissortering

Overweeg het probleem van het weergeven van submappen en bestanden in de huidige map. Als we willen sorteren op LastWriteTime en vervolgens op naam, kunnen we dit doen door het volgende te typen:

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
...

U kunt de objecten ook in omgekeerde volgorde sorteren door de parameter Aflopend schakelen op te geven.

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

Hash-tabellen gebruiken

U kunt verschillende eigenschappen in verschillende volgordes sorteren met behulp van hashtabellen in een matrix. Elke hashtabel gebruikt een expressiesleutel om de eigenschapsnaam op te geven als tekenreeks en een aflopende of aflopende sleutel om de sorteervolgorde $true$falseop of . De expressiesleutel is verplicht. De oplopende of aflopende sleutel is optioneel.

In het volgende voorbeeld worden objecten gesorteerd in aflopende volgorde LastWriteTime en oplopende naamvolgorde .

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
...

U kunt ook een scriptblok instellen op de expressiesleutel . Wanneer u de Sort-Object cmdlet uitvoert, wordt het scriptblock uitgevoerd en wordt het resultaat gebruikt voor het sorteren.

In het volgende voorbeeld worden objecten in aflopende volgorde gesorteerd op de periode tussen CreationTime en 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
...

Tips

U kunt de parameternaam van de eigenschap weglaten als volgt:

Sort-Object LastWriteTime, Name

Bovendien kunt u verwijzen naar Sort-Object de ingebouwde alias, sort:

sort LastWriteTime, Name

De sleutels in de hashtabellen voor sorteren kunnen als volgt worden afgekort:

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

In dit voorbeeld staat de e voor Expressie, de d voor Aflopend en de a voor Oplopend.

Als u de leesbaarheid wilt verbeteren, kunt u de hash-tabellen in een afzonderlijke variabele plaatsen:

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

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