Freigeben über


Sortieren von Objekten

Wir können angezeigte Daten organisieren, um die Überprüfung mithilfe des Sort-Object Cmdlets zu vereinfachen. Sort-Object verwendet den Namen einer oder mehrerer Eigenschaften, nach denen sortiert werden soll, und gibt Daten zurück, die nach den Werten dieser Eigenschaften sortiert sind.

Grundlegende Sortierung

Berücksichtigen Sie das Problem beim Auflisten von Unterverzeichnissen und Dateien im aktuellen Verzeichnis. Wenn wir nach LastWriteTime und dann nach Name sortieren möchten, können wir dies tun, indem wir Folgendes eingeben:

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

Sie können die Objekte auch in umgekehrter Reihenfolge sortieren, indem Sie den Absteigenden[switch] Parameter angeben.

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

Verwenden von Hashtabellen

Sie können unterschiedliche Eigenschaften in unterschiedlichen Reihenfolgen mithilfe von Hashtabellen in einem Array sortieren. Jede Hashtabelle verwendet einen Ausdrucksschlüssel , um den Eigenschaftsnamen als Zeichenfolge und einen aufsteigenden oder absteigenden Schlüssel anzugeben, um die Sortierreihenfolge nach $true oder $false. Der Expression-Schlüssel ist obligatorisch. Die Aufsteigende oder absteigende Taste ist optional.

Im folgenden Beispiel werden Objekte in absteigender LastWriteTime-Reihenfolge und aufsteigender Namensreihenfolge sortiert.

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

Sie können auch einen Skriptblock für den Expression-Schlüssel festlegen. Beim Ausführen des Sort-Object Cmdlets wird der Scriptblock ausgeführt, und das Ergebnis wird für die Sortierung verwendet.

Im folgenden Beispiel werden Objekte in absteigender Reihenfolge nach der Zeitspanne zwischen CreationTime und LastWriteTime sortiert.

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

Tipps

Sie können den Parameternamen "Property" wie folgt weglassen:

Sort-Object LastWriteTime, Name

Darüber hinaus können Sie sich auf Sort-Object mit dessen integriertem Alias, sort, beziehen.

sort LastWriteTime, Name

Die Schlüssel in den Hashtabellen für die Sortierung können wie folgt abgekürzt werden:

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

In diesem Beispiel steht "e" für "Ausdruck","d" steht für "Absteigend", und "a" steht für "Aufsteigend".

Um die Lesbarkeit zu verbessern, können Sie die Hashtabellen in eine separate Variable einfügen:

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

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