Sort-Object
Sortiert Objekte nach Eigenschaftswerten.
Syntax
Sort-Object
[[-Property] <Object[]>]
[-Descending]
[-Unique]
[-InputObject <psobject>]
[-Culture <string>]
[-CaseSensitive]
[<CommonParameters>]
Beschreibung
Das cmdlet Sort-Object
sortiert Objekte in aufsteigender oder absteigender Reihenfolge basierend auf Objekteigenschaftswerten. Wenn Sortiereigenschaften nicht in einem Befehl enthalten sind, verwendet PowerShell standardmäßige Sortiereigenschaften des ersten Eingabeobjekts. Wenn der Typ des Eingabeobjekts keine Standardsortierungseigenschaften aufweist, versucht PowerShell, die Objekte selbst zu vergleichen. Weitere Informationen finden Sie im Abschnitt Notizen.
Sie können Objekte nach einer einzelnen Eigenschaft oder mehreren Eigenschaften sortieren. Mehrere Eigenschaften verwenden Hashtabellen zum Sortieren in aufsteigender Reihenfolge, absteigender Reihenfolge oder einer Kombination aus Sortierreihenfolgen. Eigenschaften werden nach Groß-/Kleinschreibung oder Groß-/Kleinschreibung sortiert. Verwenden Sie den Parameter Unique, um Duplikate aus der Ausgabe zu entfernen.
Beispiele
Beispiel 1: Sortieren des aktuellen Verzeichnisses nach Name
In diesem Beispiel werden die Dateien und Unterverzeichnisse in einem Verzeichnis sortiert.
Get-ChildItem -Path C:\Test | Sort-Object
Directory: C:\Test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2/13/2019 08:55 26 anotherfile.txt
-a---- 2/13/2019 13:26 20 Bfile.txt
-a---- 2/12/2019 15:40 118014 Command.txt
-a---- 2/1/2019 08:43 183 CreateTestFile.ps1
d----- 2/25/2019 18:25 Files
d----- 2/25/2019 18:24 Logs
-ar--- 2/12/2019 14:31 27 ReadOnlyFile.txt
-a---- 2/12/2019 16:24 23 Zsystemlog.log
Das Cmdlet Get-ChildItem
ruft die Dateien und Unterverzeichnisse aus dem Verzeichnis ab, das durch den parameter Path, C:\Test
angegeben wird. Die Objekte werden an das Cmdlet Sort-Object
weitergeleitet.
Sort-Object
keine Eigenschaft angeben, sodass die Ausgabe nach der Standardsortiereigenschaft sortiert wird, Name.
Beispiel 2: Sortieren des aktuellen Verzeichnisses nach Dateilänge
Mit diesem Befehl werden die Dateien im aktuellen Verzeichnis nach Länge in aufsteigender Reihenfolge angezeigt.
Get-ChildItem -Path C:\Test -File | Sort-Object -Property Length
Directory: C:\Test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2/13/2019 13:26 20 Bfile.txt
-a---- 2/12/2019 16:24 23 Zsystemlog.log
-a---- 2/13/2019 08:55 26 anotherfile.txt
-ar--- 2/12/2019 14:31 27 ReadOnlyFile.txt
-a---- 2/1/2019 08:43 183 CreateTestFile.ps1
-a---- 2/12/2019 15:40 118014 Command.txt
Das Cmdlet Get-ChildItem
ruft die Dateien aus dem Verzeichnis ab, das durch den parameter Path angegeben wird.
Der parameter File gibt an, dass Get-ChildItem
nur Dateiobjekte abruft. Die Objekte werden an das Cmdlet Sort-Object
weitergeleitet.
Sort-Object
verwendet den Parameter Length, um die Dateien in aufsteigender Reihenfolge nach Länge zu sortieren.
Beispiel 3: Sortieren von Prozessen nach Speicherauslastung
In diesem Beispiel werden Prozesse mit der höchsten Speicherauslastung basierend auf ihrer Arbeitssatzgröße (WS) angezeigt.
Get-Process | Sort-Object -Property WS | Select-Object -Last 5
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
136 193.92 217.11 889.16 87492 8 OUTLOOK
112 347.73 297.02 95.19 106908 8 Teams
206 266.54 323.71 37.17 60620 8 MicrosoftEdgeCP
35 552.19 549.94 131.66 6552 8 Code
0 1.43 595.12 0.00 2780 0 Memory Compression
Das Cmdlet Get-Process
ruft die Liste der Prozesse ab, die auf dem Computer ausgeführt werden. Die Prozessobjekte werden an das Cmdlet Sort-Object
weitergeleitet.
Sort-Object
verwendet den Parameter Property, um die Objekte nach WS-zu sortieren. Die Objekte werden an das Cmdlet Select-Object
weitergeleitet.
Select-Object
verwendet den Parameter Last, um die letzten fünf Objekte anzugeben, bei denen es sich um die Objekte mit der höchsten WS--Verwendung handelt.
Beispiel 4: Sortieren von HistoryInfo-Objekten nach ID
Mit diesem Befehl werden die History Info-Objekte der PowerShell-Sitzung mithilfe der eigenschaft Id sortiert. Jede PowerShell-Sitzung verfügt über einen eigenen Befehlsverlauf.
Get-History | Sort-Object -Property Id -Descending
Id CommandLine
-- -----------
10 Get-Command Sort-Object -Syntax
9 $PSVersionTable
8 Get-Command Sort-Object -Syntax
7 Get-Command Sort-Object -ShowCommandInfo
6 Get-ChildItem -Path C:\Test | Sort-Object -Property Length
5 Get-Help Clear-History -online
4 Get-Help Clear-History -full
3 Get-ChildItem | Get-Member
2 Get-Command Sort-Object -Syntax
1 Set-Location C:\Test\
Das Cmdlet Get-History
ruft die Verlaufsobjekte aus der aktuellen PowerShell-Sitzung ab. Die Objekte werden an das Cmdlet Sort-Object
weitergeleitet.
Sort-Object
verwendet den Parameter Property, um die Objekte nach ID-zu sortieren. Der parameter Descending sortiert den Befehlsverlauf von der neuesten zur ältesten.
Beispiel 5: Verwenden einer Hashtabelle zum Sortieren von Eigenschaften in aufsteigender und absteigender Reihenfolge
In diesem Beispiel werden zwei Eigenschaften zum Sortieren der Objekte verwendet, Status- und DisplayName-. Status- wird in absteigender Reihenfolge sortiert, und DisplayName- in aufsteigender Reihenfolge sortiert wird.
Eine Hashtabelle wird verwendet, um den Wert des Property Parameters anzugeben. Die Hashtabelle verwendet einen Ausdruck, um die Eigenschaftennamen und Sortierreihenfolgen anzugeben. Weitere Informationen zu Hashtabellen finden Sie unter about_Hash_Tables.
Die in der Hashtabelle verwendete Status-eigenschaft ist eine aufgezählte Eigenschaft. Weitere Informationen finden Sie unter ServiceControllerStatus-.
Get-Service |
Sort-Object -Property @{Expression = "Status"; Descending = $true},
@{Expression = "DisplayName"; Descending = $false}
Status Name DisplayName
------ ---- -----------
Running Appinfo Application Information
Running BthAvctpSvc AVCTP service
Running BrokerInfrastru... Background Tasks Infrastructure Ser...
Running BDESVC BitLocker Drive Encryption Service
Running CoreMessagingRe... CoreMessaging
Running VaultSvc Credential Manager
Running DsSvc Data Sharing Service
Running Dhcp DHCP Client
...
Stopped ALG Application Layer Gateway Service
Stopped AppMgmt Application Management
Stopped BITS Background Intelligent Transfer Ser...
Stopped wbengine Block Level Backup Engine Service
Stopped BluetoothUserSe... Bluetooth User Support Service_14fb...
Stopped COMSysApp COM+ System Application
Stopped smstsmgr ConfigMgr Task Sequence Agent
Stopped DeviceInstall Device Install Service
Stopped MSDTC Distributed Transaction Coordinator
Das Cmdlet Get-Service
ruft die Liste der Dienste auf dem Computer ab. Die Dienstobjekte werden an das Cmdlet Sort-Object
weitergeleitet.
Sort-Object
verwendet den Parameter Property mit einer Hashtabelle, um die Eigenschaftennamen und Sortierreihenfolgen anzugeben. Der parameter Property wird nach zwei Eigenschaften sortiert, Status in absteigender Reihenfolge und DisplayName- in aufsteigender Reihenfolge.
Status- ist eine aufgezählte Eigenschaft.
Stopped hat den Wert 1 und Running einen Wert von 4hat. Der Parameter Descending wird auf $True
festgelegt, sodass Ausführen von Prozessen angezeigt werden, bevor Prozesse beendet werden.
DisplayName- legt den Parameter Descending auf $False
fest, um die Anzeigenamen in alphabetischer Reihenfolge zu sortieren.
Beispiel 6: Sortieren von Textdateien nach Zeitspanne
Mit diesem Befehl werden Textdateien in absteigender Reihenfolge nach der Zeitspanne zwischen CreationTime- und LastWriteTime-sortiert.
Get-ChildItem -Path C:\Test\*.txt |
Sort-Object -Property {$_.CreationTime - $_.LastWriteTime} |
Format-Table CreationTime, LastWriteTime, FullName
CreationTime LastWriteTime FullName
------------ ------------- --------
11/21/2018 12:39:01 2/26/2019 08:59:36 C:\Test\test2.txt
12/4/2018 08:29:41 2/26/2019 08:57:05 C:\Test\powershell_list.txt
2/20/2019 08:15:59 2/26/2019 12:09:43 C:\Test\CreateTestFile.txt
2/20/2019 08:15:59 2/26/2019 12:07:41 C:\Test\Command.txt
2/20/2019 08:15:59 2/26/2019 08:57:52 C:\Test\ReadOnlyFile.txt
11/29/2018 15:16:50 12/4/2018 16:16:24 C:\Test\LogData.txt
2/25/2019 18:25:11 2/26/2019 12:08:47 C:\Test\Zsystemlog.txt
2/25/2019 18:25:11 2/26/2019 08:55:33 C:\Test\Bfile.txt
2/26/2019 08:46:59 2/26/2019 12:12:19 C:\Test\LogFile3.txt
Das cmdlet Get-ChildItem
verwendet den Parameter Path, um das Verzeichnis C:\Test
und alle *.txt
Dateien anzugeben. Die Objekte werden an das Cmdlet Sort-Object
weitergeleitet.
Sort-Object
verwendet den Parameter Property mit einem Scriptblock, um die einzelnen Dateien zwischen CreationTime und LastWriteTimezu bestimmen.
Beispiel 7: Sortieren von Namen in einer Textdatei
In diesem Beispiel wird gezeigt, wie eine Liste aus einer Textdatei sortiert wird. Die Originaldatei wird als nicht sortierte Liste angezeigt.
Sort-Object
sortiert den Inhalt und sortiert dann den Inhalt mit dem Parameter Unique, der Duplikate entfernt.
# All items unsorted
Get-Content -Path C:\Test\ServerNames.txt
localhost
server01
server25
LOCALHOST
Server19
server3
localhost
# All items sorted
Get-Content -Path C:\Test\ServerNames.txt | Sort-Object
localhost
LOCALHOST
localhost
server01
Server19
server25
server3
# Unique filtered items sorted
Get-Content -Path C:\Test\ServerNames.txt | Sort-Object -Unique
localhost
server01
Server19
server25
server3
Das cmdlet Get-Content
verwendet den parameter Path, um das Verzeichnis und den Dateinamen anzugeben. Die Datei ServerNames.txt
enthält eine nicht sortierte Liste von Computernamen.
Das cmdlet Get-Content
verwendet den parameter Path, um das Verzeichnis und den Dateinamen anzugeben. Die Datei ServerNames.txt
enthält eine nicht sortierte Liste von Computernamen. Die Objekte werden an das Cmdlet Sort-Object
weitergeleitet.
Sort-Object
sortiert die Liste in der Standardreihenfolge aufsteigend.
Das cmdlet Get-Content
verwendet den parameter Path, um das Verzeichnis und den Dateinamen anzugeben. Die Datei ServerNames.txt
enthält eine nicht sortierte Liste von Computernamen. Die Objekte werden an das Cmdlet Sort-Object
weitergeleitet.
Sort-Object
verwendet den Parameter Unique, um doppelte Computernamen zu entfernen. Die Liste wird in der Standardreihenfolge aufsteigend sortiert.
Beispiel 8: Sortieren einer Zeichenfolge als ganze Zahl
In diesem Beispiel wird gezeigt, wie Sie eine Textdatei sortieren, die Zeichenfolgenobjekte als ganze Zahlen enthält. Sie können jeden Befehl an die Pipeline senden, um Get-Member
und zu überprüfen, ob es sich bei den Objekten um Zeichenfolgen und nicht um ganze Zahlen handelt. In diesen Beispielen enthält die datei ProductId.txt
eine nicht sortierte Liste der Produktnummern.
Im ersten Beispiel ruft Get-Content
den Inhalt der Datei- und Rohrleitungen an das Cmdlet Sort-Object
ab.
Sort-Object
sortiert die Zeichenfolgenobjekte in aufsteigender Reihenfolge.
# String sorted
Get-Content -Path C:\Test\ProductId.txt | Sort-Object
0
1
12345
1500
2
2800
3500
4100
500
6200
77
88
99999
# Integer sorted
Get-Content -Path C:\Test\ProductId.txt | Sort-Object {[int]$_}
0
1
2
77
88
500
1500
2800
3500
4100
6200
12345
99999
Im zweiten Beispiel ruft Get-Content
den Inhalt der Datei- und Rohrleitungen an das Cmdlet Sort-Object
ab.
Sort-Object
verwendet einen Skriptblock, um die Zeichenfolgen in ganze Zahlen zu konvertieren. Im Beispielcode konvertiert [int]
die Zeichenfolge in eine ganze Zahl und $_
jede Zeichenfolge darstellt, wie sie in die Pipeline fällt. Die ganzzahligen Objekte werden an das Cmdlet Sort-Object
weitergeleitet.
Sort-Object
sortiert die ganzzahligen Objekte in numerischer Reihenfolge.
Beispiel 9: Sortieren nach mehreren Eigenschaften
Wenn Sie nach mehreren Eigenschaften sortieren möchten, trennen Sie die Eigenschaften nach Kommas.
Get-ChildItem -Path C:\Test | Sort-Object Length,Name
Directory: C:\Test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 13/10/2021 22:16 2 File01.txt
-a--- 13/10/2021 22:16 2 File03.txt
-a--- 13/10/2021 22:18 64 File02.txt
-a--- 13/10/2021 22:18 64 File04.txt
Das Cmdlet Get-ChildItem
ruft die Dateien aus dem Verzeichnis ab, das durch den parameter Path angegeben wird.
Die Objekte werden an das Cmdlet Sort-Object
weitergeleitet.
Sort-Object
verwendet den Parameter Length und Name, um die Dateien in aufsteigender Reihenfolge nach Länge zu sortieren. Da File01.txt
und File03.txt
dieselbe Länge aufweisen, werden sie weiter nach ihrer Eigenschaft Namesortiert.
Beispiel 10: Sortieren von Hashtables nach ihren Schlüsselwerten mit berechneten Eigenschaften
In diesem Beispiel wird gezeigt, wie Sie Hashtable- Objekte nach dem Wert ihrer Schlüssel sortieren können. Sie können einen oder mehrere Scriptblocks für den Parameter Property angeben. Die Ausdrücke in diesen Scriptblocks werden verwendet, um die Sortierreihenfolge für die Eingabe wie die Werte für benannte Eigenschaften zu bestimmen.
@(
@{ name = 'a' ; weight = 7 }
@{ name = 'b' ; weight = 1 }
@{ name = 'c' ; weight = 3 }
@{ name = 'd' ; weight = 7 }
) | Sort-Object -Property { $_.weight }, { $_.name } -OutVariable Sorted
$Sorted | ForEach-Object -Process { "{0}: {1}" -f $_.name, $_.weight }
Die ausdrücke { $_.weight }
und { $_.name }
sortieren die Eingabehashtables zuerst nach dem Wert ihres weight
-Schlüssels und dann nach dem Wert des name
-Schlüssels. Der befehl Sort-Object
verwendet den OutVariable Parameter, um das Ergebnis in einer Variablen zu speichern und das Ergebnis im gleichen Aufruf anzuzeigen.
Der letzte Befehl durchläuft die sortierten Hashtables, um ihren Namen und die Gewichtung als Zeichenfolge anzuzeigen.
Parameter
-CaseSensitive
Gibt an, dass bei der Sortierung die Groß-/Kleinschreibung beachtet wird. Bei Sortierungen wird standardmäßig keine Groß-/Kleinschreibung beachtet.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | Case-insensitive |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Culture
Gibt die kulturelle Konfiguration an, die für Sortierungen verwendet werden soll. Verwenden Sie Get-Culture
, um die Systemkulturkonfiguration anzuzeigen.
Typ: | String |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Descending
Gibt an, dass Sort-Object
die Objekte in absteigender Reihenfolge sortiert. Der Standardwert ist die aufsteigende Reihenfolge.
Verwenden Sie eine Hashtabelle, um mehrere Eigenschaften mit unterschiedlichen Sortierreihenfolgen zu sortieren. Beispielsweise können Sie mit einer Hashtabelle eine Eigenschaft in aufsteigender Reihenfolge und eine andere Eigenschaft in absteigender Reihenfolge sortieren.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | Ascending |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-InputObject
Um Objekte zu sortieren, senden Sie sie an Sort-Object
nach unten. Wenn Sie den parameter InputObject verwenden, um eine Auflistung von Elementen zu übermitteln, empfängt Sort-Object
ein Objekt, das die Auflistung darstellt. Da ein Objekt nicht sortiert werden kann, gibt Sort-Object
die gesamte Auflistung unverändert zurück.
Typ: | PSObject |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | True |
Platzhalterzeichen akzeptieren: | False |
-Property
Gibt die Eigenschaftennamen an, die Sort-Object
zum Sortieren der Objekte verwendet. Wildcards sind zulässig.
Objekte werden basierend auf den Eigenschaftswerten sortiert. Wenn Sie keine Eigenschaft angeben, werden Sort-Object
basierend auf den Standardeigenschaften für den Objekttyp oder die Objekte selbst sortiert.
Verwenden Sie Kommas, um mehrere Eigenschaften zu trennen. Mehrere Eigenschaften können in aufsteigender Reihenfolge, absteigender Reihenfolge oder einer Kombination von Sortierreihenfolgen sortiert werden. Wenn Sie mehrere Eigenschaften angeben, werden die Objekte nach der ersten Eigenschaft sortiert. Wenn mehrere Objekte denselben Wert für die erste Eigenschaft haben, werden diese Objekte nach der zweiten Eigenschaft sortiert. Dieser Vorgang wird fortgesetzt, bis keine weiteren angegebenen Eigenschaften oder keine Gruppen von Objekten vorhanden sind.
Der Wert des Property Parameters kann eine berechnete Eigenschaft sein. Verwenden Sie zum Erstellen einer berechneten Eigenschaft einen Scriptblock oder eine Hashtabelle.
Gültige Schlüssel für eine Hashtabelle sind wie folgt:
-
expression
-<string>
oder<script block>
-
ascending
oderdescending
-<boolean>
Weitere Informationen finden Sie unter about_Calculated_Properties.
Typ: | Object[] |
Position: | 0 |
Standardwert: | Default properties |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | True |
-Unique
Gibt an, dass Sort-Object
Duplikate eliminiert und nur die eindeutigen Elemente der Auflistung zurückgibt. Die erste Instanz eines eindeutigen Werts ist in der sortierten Ausgabe enthalten.
Eindeutigen wird die Groß-/Kleinschreibung nicht beachtet. Zeichenfolgen, die sich nur je nach Zeichenfall unterscheiden, werden als identisch betrachtet. Beispiel: Zeichen und ZEICHEN.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | All |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Eingaben
Sie können die Objekte weiterleiten, die an dieses Cmdlet sortiert werden sollen.
Ausgaben
Dieses Cmdlet gibt die sortierten Objekte zurück.
Hinweise
Windows PowerShell enthält die folgenden Aliase für Sort-Object
:
sort
Das cmdlet Sort-Object
sortiert Objekte basierend auf eigenschaften, die im Befehl angegeben sind, oder die Standardsortiereigenschaften für den Objekttyp. Standardsortierungseigenschaften werden mithilfe der PropertySet
namens DefaultKeyPropertySet
in einer types.ps1xml
Datei definiert. Weitere Informationen finden Sie unter about_Types.ps1xml.
Wenn ein Objekt nicht über eine der angegebenen Eigenschaften verfügt, wird der Eigenschaftswert für dieses Objekt von Sort-Object
als Null- interpretiert und am Ende der Sortierreihenfolge platziert.
Wenn keine Sortiereigenschaften verfügbar sind, versucht PowerShell, die Objekte selbst zu vergleichen.
Sort-Object
verwendet die Compare-Methode für jede Eigenschaft. Wenn eine Eigenschaft IComparablenicht implementiert, konvertiert das Cmdlet den Eigenschaftswert in eine Zeichenfolge und verwendet die Compare-Methode für System.String-. Weitere Informationen finden Sie unter PSObject.CompareTo(Object) Method.
Wenn Sie nach einer aufgezählten Eigenschaft wie Statussortieren, werden Sort-Object
nach den Enumerationswerten sortiert. Für Windows-Dienste hat Stopped den Wert 1 und Running einen Wert von 4hat.
Beendete wird vor Ausführen aufgrund der aufgezählten Werte sortiert. Weitere Informationen finden Sie unter ServiceControllerStatus-.