Objecten sorteren

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

Eenvoudige sortering

Houd rekening met het probleem van het in de huidige map bekijken van subdirectory's en bestanden. 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 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

Hashtabellen gebruiken

U kunt verschillende eigenschappen in verschillende orders sorteren met behulp van hashtabellen in een matrix. Elke hashtabel gebruikt een expressiesleutel om de naam van de eigenschap op te geven als tekenreeks en een oplopende of aflopende sleutel om de sorteerorde op of op $true te $false geven. 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 scriptblock instellen op de expressiesleutel. Bij het uitvoeren Sort-Object van de cmdlet wordt het scriptblok uitgevoerd en wordt het resultaat gebruikt voor sorteren.

In het volgende voorbeeld worden objecten in aflopende volgorde gesorteerd op de tijd tussen CreationTime en LastWriteTime.

Get-ChildItem |
  Sort-Object -Property @{ Expression = { $_.LastWriteTime - $_.CreationTime }; Descending = $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 naam van de eigenschapsparameter weglaten als volgt:

Sort-Object LastWriteTime, Name

Bovendien kunt u verwijzen naar Sort-Object met 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 e voor Expressie, de d voor Aflopend en de een voor Oplopend.

Om de leesbaarheid te verbeteren, kunt u de hashtabellen in een afzonderlijke variabele plaatsen:

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

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