Sort-Object
Sortiert Objekte nach Eigenschaftenwerten.
Syntax
Sort-Object
[-Stable]
[-Descending]
[-Unique]
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Sort-Object
[-Descending]
[-Unique]
-Top <Int32>
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Sort-Object
[-Descending]
[-Unique]
-Bottom <Int32>
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Beschreibung
Das Sort-Object
Cmdlet sortiert Objekte in aufsteigender oder absteigender Reihenfolge basierend auf Objekteigenschaftenwerten. Wenn Sortiereigenschaften in einem Befehl nicht 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 Hinweise.
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 Sortierreihenfolge. Eigenschaften werden als Groß- oder Kleinschreibung sortiert. Verwenden Sie den Eindeutigen Parameter, 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 Get-ChildItem
Cmdlet ruft die Dateien und Unterverzeichnisse aus dem Verzeichnis ab, das vom Parameter "Pfad" angegeben ist. C:\Test
Die Objekte werden an das Sort-Object
Cmdlet gesendet.
Sort-Object
gibt keine Eigenschaft an, sodass die Ausgabe nach der Standardsortierungseigenschaft, Name, sortiert wird.
Beispiel 2: Sortieren des aktuellen Verzeichnisses nach Dateilänge
Dieser Befehl zeigt die Dateien im aktuellen Verzeichnis nach Länge in aufsteigender Reihenfolge an.
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 Get-ChildItem
Cmdlet ruft die Dateien aus dem verzeichnis ab, das vom Pfadparameter angegeben wird.
Der Dateiparameter gibt an, dass Get-ChildItem
nur Dateiobjekte abrufen. Die Objekte werden an das Sort-Object
Cmdlet gesendet. Sort-Object
verwendet den Parameter "Length ", um die Dateien in aufsteigender Reihenfolge nach Länge zu sortieren.
Beispiel 3: Sortieren von Prozessen nach Speichernutzung
In diesem Beispiel werden Prozesse mit der höchsten Speichernutzung 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 Get-Process
Cmdlet ruft die Liste der Prozesse ab, die auf dem Computer ausgeführt werden. Die Prozessobjekte werden an das Sort-Object
Cmdlet gesendet. Sort-Object
verwendet den Eigenschaftsparameter , um die Objekte nach WS zu sortieren. Die Objekte werden an das Select-Object
Cmdlet gesendet.
Select-Object
Verwendet den Last-Parameter , um die letzten fünf Objekte anzugeben, die die Objekte mit der höchsten WS-Verwendung sind.
In PowerShell 6 ist der Sort-Object
Parameter Bottom eine Alternative zu Select-Object
. Beispiel: Get-Process | Sort-Object -Property WS -Bottom 5
.
Beispiel 4: Sortieren von HistoryInfo-Objekten nach ID
Dieser Befehl sortiert die HistoryInfo-Objekte der PowerShell-Sitzung mithilfe der Id-Eigenschaft . 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 Get-History
Cmdlet ruft die Verlaufsobjekte aus der aktuellen PowerShell-Sitzung ab. Die Objekte werden an das Sort-Object
Cmdlet gesendet. Sort-Object
verwendet den Eigenschaftsparameter , um die Objekte nach ID zu sortieren. Der Absteigende Parameter sortiert den Befehlsverlauf von neuer zu ältester.
Beispiel 5: Verwenden einer Hashtabelle zum Sortieren von Eigenschaften in aufsteigender und absteigender Reihenfolge
In diesem Beispiel werden zwei Eigenschaften verwendet, um die Objekte, den Status und den DisplayName zu sortieren. Der Status wird in absteigender Reihenfolge sortiert und DisplayName wird in aufsteigender Reihenfolge sortiert.
Eine Hashtabelle wird verwendet, um den Wert des Eigenschaftsparameters anzugeben. In der Hashtabelle wird ein Ausdruck verwendet, um die Eigenschaftennamen und Sortierreihenfolgen anzugeben. Weitere Informationen zu Hashtabellen finden Sie unter about_Hash_Tables (Informationen zu Hashtabellen).
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 Get-Service
Cmdlet ruft die Liste der Dienste auf dem Computer ab. Die Dienstobjekte werden an das Sort-Object
Cmdlet gesendet. Sort-Object
verwendet den Eigenschaftsparameter mit einer Hashtabelle, um die Eigenschaftennamen und Sortierreihenfolgen anzugeben. Der Eigenschaftsparameter wird nach zwei Eigenschaften sortiert, Status in absteigender Reihenfolge und DisplayName in aufsteigender Reihenfolge.
Status ist eine aufgezählte Eigenschaft. Beendet hat einen Wert von 1 und "Running " hat einen Wert von 4. Der Absteigende Parameter wird so festgelegt $True
, dass Ausgeführte Prozesse vor beendeten Prozessen angezeigt werden. DisplayName legt den Absteigenden Parameter fest, um $False
die Anzeigenamen in alphabetischer Reihenfolge zu sortieren.
Beispiel 6: Sortieren von Textdateien nach Zeitraum
Dieser Befehl sortiert Textdateien in absteigender Reihenfolge nach dem Zeitraum zwischen CreationTime und LastWriteTime.
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 Get-ChildItem
Cmdlet verwendet den Pfadparameter , um das Verzeichnis C:\Test
und alle *.txt
Dateien anzugeben. Die Objekte werden an das Sort-Object
Cmdlet gesendet.
Sort-Object
verwendet den Eigenschaftsparameter mit einem Skriptblock, um die einzelnen Dateien zwischen CreationTime und LastWriteTime zu bestimmen.
Beispiel 7: Sortieren von Namen in einer Textdatei
In diesem Beispiel wird gezeigt, wie Sie eine Liste aus einer Textdatei sortieren. Die ursprüngliche Datei wird als nicht sortierte Liste angezeigt. Sort-Object
sortiert den Inhalt und sortiert dann den Inhalt mit dem Eindeutigen Parameter, 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 Get-Content
Cmdlet verwendet den Pfadparameter , um den Verzeichnis- und Dateinamen anzugeben. Die Datei ServerNames.txt
enthält eine nicht sortierte Liste von Computernamen.
Das Get-Content
Cmdlet verwendet den Pfadparameter , um den Verzeichnis- und Dateinamen anzugeben. Die Datei ServerNames.txt
enthält eine nicht sortierte Liste von Computernamen. Die Objekte werden an das Sort-Object
Cmdlet gesendet. Sort-Object
sortiert die Liste in der Standardreihenfolge, aufsteigend.
Das Get-Content
Cmdlet verwendet den Pfadparameter , um den Verzeichnis- und Dateinamen anzugeben. Die Datei ServerNames.txt
enthält eine nicht sortierte Liste von Computernamen. Die Objekte werden an das Sort-Object
Cmdlet gesendet. Sort-Object
Verwendet den Eindeutigen Parameter, um doppelte Computernamen zu entfernen. Die Liste wird in der Standardreihenfolge sortiert, aufsteigend.
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 nach Get-Member
unten senden und überprüfen, ob die Objekte Zeichenfolgen sind, anstatt ganze Zahlen. Für diese Beispiele enthält die ProductId.txt
Datei eine nicht sortierte Liste der Produktnummern.
Im ersten Beispiel Get-Content
wird der Inhalt der Datei- und Rohrlinien zum Sort-Object
Cmdlet abgerufen. 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 Get-Content
wird der Inhalt der Datei- und Rohrlinien an das Sort-Object
Cmdlet abgerufen. Sort-Object
verwendet einen Skriptblock, um die Zeichenfolgen in ganze Zahlen zu konvertieren. Wandelt im Beispielcode die Zeichenfolge in eine ganze Zahl um und $_
stellt jede Zeichenfolge dar, [int]
da sie die Pipeline herunterkommt. Die ganzzahligen Objekte werden an das Sort-Object
Cmdlet gesendet.
Sort-Object
sortiert die ganzzahligen Objekte in numerischer Reihenfolge.
Beispiel 9: Verwenden von stabilen Sortierungen
Wenn Sie die Parameter "Top", " Bottom" oder " Stable " verwenden, werden die sortierten Objekte in der Reihenfolge übermittelt, die Sort-Object
sie erhalten haben, wenn die Sortierkriterien gleich sind. In diesem Beispiel sortieren wir die Zahlen 1 bis 20 nach dem Wert "modulo 3". Der Modulo-Wert liegt zwischen Null und zwei.
1..20 |Sort-Object {$_ % 3}
18
3
15
6
12
9
1
16
13
10
7
4
19
11
8
14
5
17
2
20
1..20 |Sort-Object {$_ % 3} -Stable
3
6
9
12
15
18
1
4
7
10
13
16
19
2
5
8
11
14
17
20
Die Ausgabe aus der ersten Sortierung wird ordnungsgemäß durch den Modulwert gruppiert, aber die einzelnen Elemente werden nicht innerhalb des Modulusbereichs sortiert. Die zweite Sortierung verwendet die Option "Stabil ", um eine stabile Sortierung zurückzugeben.
Beispiel 10: Sortieren nach mehreren Eigenschaften
Wenn Sie nach mehreren Eigenschaften sortieren möchten, trennen Sie die Eigenschaften durch 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 Get-ChildItem
Cmdlet ruft die Dateien aus dem verzeichnis ab, das vom Pfadparameter angegeben wird. Die Objekte werden an das Sort-Object
Cmdlet gesendet. Sort-Object
verwendet den Parameter "Länge " und " Name ", um die Dateien nach Länge in aufsteigender Reihenfolge zu sortieren. Da File01.txt
sie File03.txt
dieselbe Länge haben, werden sie weiter nach ihrem Eigenschaftennamen sortiert.
Parameter
-Bottom
Gibt die Anzahl der Objekte an, die vom Ende eines sortierten Objektarrays abgerufen werden sollen. Dies führt zu einer stabilen Sortierung.
Dieser Parameter wurde in PowerShell 6.0 eingeführt.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-CaseSensitive
Gibt an, dass die Sortierung groß- und kleinschreibungsgeschützt ist. Standardmäßig sind Sortierungen nicht groß- und kleinschreibungsgeschützt.
Type: | SwitchParameter |
Position: | Named |
Default value: | Case-insensitive |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Culture
Gibt die kulturelle Konfiguration an, die für Sortierungen verwendet werden soll. Verwenden Sie Get-Culture
zum Anzeigen der Kulturkonfiguration des Systems.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Descending
Gibt an, dass Sort-Object
die Objekte in absteigender Reihenfolge sortiert werden. Standardmäßig wird in aufsteigender Reihenfolge sortiert.
Um mehrere Eigenschaften mit unterschiedlichen Sortierreihenfolgen zu sortieren, verwenden Sie eine Hashtabelle. Mit einer Hashtabelle können Sie beispielsweise eine Eigenschaft in aufsteigender Reihenfolge und einer anderen Eigenschaft in absteigender Reihenfolge sortieren.
Type: | SwitchParameter |
Position: | Named |
Default value: | Ascending |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Um Objekte zu sortieren, senden Sie sie nach unten an Sort-Object
. Wenn Sie den InputObject-Parameter verwenden, um eine Auflistung von Elementen zu übermitteln, Sort-Object
erhält ein Objekt, das die Auflistung darstellt. Da ein Objekt nicht sortiert werden kann, Sort-Object
gibt die gesamte Auflistung unverändert zurück.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Property
Gibt die Eigenschaftennamen an, die Sort-Object
zum Sortieren der Objekte verwendet werden. Platzhalter sind zulässig.
Objekte werden basierend auf den Eigenschaftenwerten sortiert. Wenn Sie keine Eigenschaft angeben, Sort-Object
sortieren Sie basierend auf Standardeigenschaften für den Objekttyp oder die Objekte selbst.
Verwenden Sie Kommas, um mehrere Eigenschaften zu trennen. Mehrere Eigenschaften können in aufsteigender Reihenfolge, absteigender Reihenfolge oder einer Kombination aus Sortierreihenfolge 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 Prozess wird fortgesetzt, bis keine weiteren angegebenen Eigenschaften oder keine Gruppen von Objekten mehr vorhanden sind.
Der Wert des Eigenschaftsparameters kann eine berechnete Eigenschaft sein. Verwenden Sie zum Erstellen einer berechneten Eigenschaft einen Skriptblock oder eine Hashtable.
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.
Type: | Object[] |
Position: | 0 |
Default value: | Default properties |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-Stable
Die sortierten Objekte werden in der Reihenfolge geliefert, in der sie empfangen wurden, wenn die Sortierkriterien gleich sind.
Dieser Parameter wurde in PowerShell v6.2.0 hinzugefügt.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Top
Gibt die Anzahl der Objekte an, die vom Anfang eines sortierten Objektarrays abgerufen werden sollen. Dies führt zu einer stabilen Sortierung.
Dieser Parameter wurde in PowerShell 6.0 eingeführt.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Unique
Gibt an, dass Sort-Object
Duplikate entfernt und nur die eindeutigen Elemente der Auflistung zurückgegeben werden. Die erste Instanz eines eindeutigen Werts ist in der sortierten Ausgabe enthalten.
Eindeutig ist Groß-/Kleinschreibung. Zeichenfolgen, die sich nur von Zeichenfall unterscheiden, werden als identisch betrachtet. Beispiel: Zeichen und ZEICHEN.
Type: | SwitchParameter |
Position: | Named |
Default value: | All |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Eingaben
Sie können die Zu sortierenden Objekte an Sort-Object
die Objekte verleitungen.
Ausgaben
Sort-Object
gibt die sortierten Objekte zurück.
Hinweise
Das Sort-Object
Cmdlet sortiert Objekte basierend auf eigenschaften, die im Befehl oder den Standardsortierungseigenschaften für den Objekttyp angegeben sind. Standardmäßige Sortiereigenschaften werden mithilfe des Benannten PropertySet
DefaultKeyPropertySet
in einer types.ps1xml
Datei definiert. Weitere Informationen finden Sie unter about_Types.ps1xml.
Wenn ein Objekt keine der angegebenen Eigenschaften aufweist, wird der Eigenschaftswert für dieses Objekt als Sort-Object
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 IComparable nicht 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 eine aufgezählte Eigenschaft wie "Status" sortieren, Sort-Object
sortieren Sie nach den Aufzählungswerten. Für Windows-Dienste hat "Beendet " einen Wert von 1 und " Ausführen " hat einen Wert von 4.
Beendet wird, bevor die Ausführung aufgrund der aufgezählten Werte ausgeführt wird. Weitere Informationen finden Sie unter ServiceControllerStatus.
Die Leistung des Sortieralgorithmus ist langsamer, wenn eine stabile Sortierung ausgeführt wird.