Sortieren von Objekten
Sie können die angezeigten Daten mithilfe des Cmdlets Sort-Object
ordnen, damit sie sich einfacher überprüfen lassen.
Sort-Object
erhält den Namen von mindestens einer Eigenschaft, nach der sortiert werden soll, und gibt Daten zurück, die nach den Werten dieser Eigenschaften sortiert sind.
Grundlegende Sortierung
Angenommen, Unterverzeichnisse und Dateien sollen im aktuellen Verzeichnis aufgelistet werden. Wenn wir nach LastWriteTime und dann nach Name sortieren möchten, können wir dies durch die folgende Eingabe erreichen:
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 Descending-Umschaltparameter 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 verschiedene Eigenschaften in unterschiedlichen Reihenfolgen sortieren, indem Sie Hashtabellen in einem Array verwenden. Jede Hashtabelle verwendet einen Expression-Schlüssel, um den Namen der Eigenschaft als Zeichenfolge anzugeben, und einen Ascending- oder Descending-Schlüssel, um die Sortierreihenfolge durch $true
oder $false
anzugeben. Der Expression-Schlüssel ist erforderlich. Die Ascending- oder Descending-Schlüssel sind optional.
Das folgende Beispiel sortiert Objekte in absteigender LastWriteTime- und aufsteigender Name-Reihenfolge.
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 auf den Expression-Schlüssel festlegen. Wenn Sie das Cmdlet Sort-Object
ausführen, wird der Skriptblock ausgeführt und das Ergebnis für die Sortierung verwendet.
Das folgende Beispiel sortiert Objekte in absteigender Reihenfolge nach der Zeitspanne zwischen CreationTime und 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
...
Tipps
Sie können den Property-Parameternamen wie folgt auslassen:
Sort-Object LastWriteTime, Name
Außerdem können Sie sich auch auf Sort-Object
über den integrierten 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 das e für Expression, das d für Descending und das a für Ascending.
Um die Lesbarkeit zu verbessern, können Sie die Hashtabellen in einer separaten Variablen platzieren:
$order = @(
@{ Expression = 'LastWriteTime'; Descending = $true }
@{ Expression = 'Name'; Ascending = $true }
)
Get-ChildItem |
Sort-Object $order |
Format-Table LastWriteTime, Name