Freigeben über


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:\Testangegeben 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-Objectnach 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 oder descending - <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

PSObject

Sie können die Objekte weiterleiten, die an dieses Cmdlet sortiert werden sollen.

Ausgaben

PSObject

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