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 Oder descending - <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

PSObject

Sie können die Zu sortierenden Objekte an Sort-Objectdie Objekte verleitungen.

Ausgaben

PSObject

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