Freigeben über


Sort-Object

Sortiert Objekte nach Eigenschaftenwerten.

Syntax

Sort-Object
    [[-Property] <Object[]>]
    [-Descending]
    [-Unique]
    [-InputObject <psobject>]
    [-Culture <string>]
    [-CaseSensitive]
    [<CommonParameters>]

Beschreibung

Das Sort-Object Cmdlet sortiert Objekte basierend auf Objekteigenschaftenwerten in aufsteigender oder absteigender Reihenfolge. Wenn Sortiereigenschaften nicht in einem Befehl enthalten sind, verwendet PowerShell Standardsortiereigenschaften.

Sie können Objekte nach einer einzelnen Eigenschaft oder mehreren Eigenschaften sortieren. Mehrere Eigenschaften verwenden Hashtabellen, um in aufsteigender Reihenfolge, absteigender Reihenfolge oder einer Kombination von Sortierreihenfolgen zu sortieren. Bei Eigenschaften wird die Groß-/Kleinschreibung oder die Groß-/Kleinschreibung nicht beachtet. Verwenden Sie den Unique-Parameter , um Duplikate aus der Ausgabe zu entfernen.

Beispiele

Beispiel 1: Sortieren des aktuellen Verzeichnisses nach Name

Mit diesem Befehl werden die Dateien und Unterverzeichnisse in einem Verzeichnis sortiert.

PS> 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 durch den Path-ParameterC:\Test angegeben wird. Die Objekte werden in der Pipeline an das Sort-Object Cmdlet gesendet. Sort-Object gibt keine Eigenschaft an, sodass die Ausgabe nach der Standardsortiereigenschaft Name sortiert wird.

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.

PS> 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 durch den Path-Parameter angegebenen Verzeichnis ab. Der File-Parameter gibt an, dass Get-ChildItem nur Dateiobjekte abgerufen werden. Die Objekte werden in der Pipeline an das Sort-Object Cmdlet gesendet. Sort-Object verwendet den Length-Parameter , um die Dateien nach Länge in aufsteigender Reihenfolge zu sortieren.

Beispiel 3: Sortieren von Prozessen nach Arbeitsspeicherauslastung

In diesem Beispiel werden Prozesse mit der höchsten Arbeitsspeicherauslastung basierend auf der WS-Größe (Working Set) angezeigt.

PS> 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 in der Pipeline an das Sort-Object Cmdlet gesendet. Sort-Object verwendet den Property-Parameter , um die Objekte nach WS zu sortieren. Die Objekte werden in der Pipeline an das Select-Object Cmdlet gesendet. 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-Auslastung handelt.

Beispiel 4: Sortieren von HistoryInfo-Objekten nach ID

Mit diesem Befehl werden die HistoryInfo-Objekte der PowerShell-Sitzung mithilfe der Id-Eigenschaft sortiert. Jede PowerShell-Sitzung verfügt über einen eigenen Befehlsverlauf.

PS> 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 in der Pipeline an das Sort-Object Cmdlet gesendet. Sort-Object verwendet den Property-Parameter , um die Objekte nach ID zu sortieren. Der Absteigende Parameter sortiert den Befehlsverlauf von neuestem zum ältesten.

Beispiel 5: Verwenden einer Hashtabelle zum Sortieren von Eigenschaften in aufsteigender und absteigender Reihenfolge

Dieser Befehl verwendet zwei Eigenschaften, um die Objekte zu sortieren: Status und DisplayName. Status wird in absteigender Reihenfolge sortiert, und DisplayName wird in aufsteigender Reihenfolge sortiert.

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 (Informationen zu Hashtabellen).

Die status-Eigenschaft , die in der Hashtabelle verwendet wird, ist eine aufgezählte Eigenschaft. Weitere Informationen finden Sie unter ServiceControllerStatus.

PS C:\> 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 in der Pipeline an das Sort-Object Cmdlet gesendet. Sort-Object verwendet den Property-Parameter mit einer Hashtabelle, um die Eigenschaftennamen und Sortierreihenfolgen anzugeben. Der Property-Parameter ist nach zwei Eigenschaften sortiert: Status in absteigender Reihenfolge und DisplayName in aufsteigender Reihenfolge.

Status ist eine aufgezählte Eigenschaft. Beendet hat den Wert 1 und Running hat den Wert 4. Der Absteigende Parameter ist auf $True festgelegt, sodass ausgeführte Prozesse vor beendeten Prozessen angezeigt werden. DisplayName legt den Absteigenden Parameter auf fest $False , 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.

PS> Get-ChildItem -Path C:\Test\*.txt | Sort-Object -Property @{Expression = {$_.CreationTime - $_.LastWriteTime}; Descending = $False} | 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 Path-Parameter , um das Verzeichnis C:\Test und alle *.txt Dateien anzugeben. Die Objekte werden in der Pipeline an das Sort-Object Cmdlet gesendet. Sort-Object verwendet den Property-Parameter mit einer Hashtabelle, um jede Dateizeitspanne zwischen CreationTime und LastWriteTime zu bestimmen. Der Absteigende Parameter ist auf $False festgelegt, um in der Reihenfolge der längsten bis kürzesten Zeitspanne zu sortieren.

Beispiel 7: Sortieren von Namen in einer Textdatei

In diesem Beispiel wird gezeigt, wie eine Liste aus einer Textdatei sortiert wird. Die ursprüngliche Datei wird als unsortierte Liste angezeigt. Sort-Object sortiert den Inhalt und sortiert dann den Inhalt mit dem Unique-Parameter , der Duplikate entfernt.

PS> Get-Content -Path C:\Test\ServerNames.txt
localhost
server01
server25
LOCALHOST
Server19
server3
localhost

PS> Get-Content -Path C:\Test\ServerNames.txt | Sort-Object
localhost
LOCALHOST
localhost
server01
Server19
server25
server3

PS> Get-Content -Path C:\Test\ServerNames.txt | Sort-Object -Unique
localhost
server01
Server19
server25
server3

Das Get-Content Cmdlet verwendet den Path-Parameter , um das Verzeichnis und den Dateinamen anzugeben. Die DateiServerNames.txt enthält eine unsortierte Liste von Computernamen.

Das Get-Content Cmdlet verwendet den Path-Parameter , um das Verzeichnis und den Dateinamen anzugeben. Die DateiServerNames.txt enthält eine unsortierte Liste von Computernamen. Die Objekte werden in der Pipeline an das Sort-Object Cmdlet gesendet. Sort-Object sortiert die Liste in der Standardreihenfolge aufsteigend.

Das Get-Content Cmdlet verwendet den Path-Parameter , um das Verzeichnis und den Dateinamen anzugeben. Die DateiServerNames.txt enthält eine unsortierte Liste von Computernamen. Die Objekte werden in der Pipeline an das Sort-Object Cmdlet gesendet. Sort-Object verwendet den Unique-Parameter , um doppelte Computernamen zu entfernen. Die Liste ist in der Standardreihenfolge aufsteigend sortiert.

Beispiel 8: Sortieren einer Zeichenfolge als ganze Zahl

In diesem Beispiel wird gezeigt, wie eine Textdatei, die Zeichenfolgenobjekte enthält, als ganze Zahlen sortiert wird. Sie können jeden Befehl an die Pipeline senden und überprüfen, ob es sich bei den Objekten um Get-Member Zeichenfolgen oder ganze Zahlen handelt.

PS> Get-Content -Path C:\Test\ProductId.txt | Sort-Object
0
1
12345
1500
2
2800
3500
4100
500
6200
77
88
99999

PS> Get-Content -Path C:\Test\ProductId.txt | ForEach-Object -Process {[int]$_} | Sort-Object
0
1
2
77
88
500
1500
2800
3500
4100
6200
12345
99999

Das Get-Content Cmdlet verwendet den Path-Parameter , um das Verzeichnis und den Dateinamen anzugeben. Die DateiProductId.txt enthält eine unsortierte Liste von Produktnummern. Die Zeichenfolgenobjekte werden in der Pipeline an das Sort-Object Cmdlet gesendet. Sort-Object sortiert die Zeichenfolgenobjekte in aufsteigender Reihenfolge.

Das Get-Content Cmdlet verwendet den Path-Parameter , um das Verzeichnis und den Dateinamen anzugeben. Die DateiProductId.txt enthält eine unsortierte Liste von Produktnummern. Die Zeichenfolgenobjekte werden in der Pipeline an das ForEach-Object Cmdlet gesendet. ForEach-Object verwendet einen Skriptblock, um die Zeichenfolgen in ganze Zahlen zu konvertieren. Konvertiert im Beispielcode die Zeichenfolge in eine ganze Zahl und $_ stellt jede Zeichenfolge dar, [int] während sie aus der Pipeline kommt. Die ganzzahligen Objekte werden in der Pipeline an das Sort-Object Cmdlet gesendet. Sort-Object sortiert die ganzzahligen Objekte in numerischer Reihenfolge.

Parameter

-CaseSensitive

Gibt an, dass bei der Sortierung die Groß-/Kleinschreibung beachtet wird. Bei Sortierungen wird standardmäßig die Groß-/Kleinschreibung nicht beachtet.

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 , um die Kulturkonfiguration des Systems anzuzeigen.

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.

Verwenden Sie eine Hashtabelle, um mehrere Eigenschaften mit unterschiedlichen Sortierreihenfolgen zu sortieren. Mit einer Hashtabelle können Sie beispielsweise eine Eigenschaft in aufsteigender Reihenfolge und eine andere 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 in der Pipeline an Sort-Object. Wenn Sie den InputObject-Parameter verwenden, um eine Auflistung von Elementen zu übermitteln, Sort-Object empfängt 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 sortiert sie anhand der Standardeigenschaften für den Objekttyp.

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 den gleichen 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 Property-Parameters kann eine berechnete Eigenschaft sein. Zum Erstellen einer berechneten Eigenschaft verwenden Sie eine Hashtabelle.

Gültige Schlüssel für eine Hashtabelle sind wie folgt:

  • Ausdruckszeichenfolge <> oder <Skriptblock>
  • Aufsteigender <Boolescher Wert>
  • Absteigender <Boolescher Wert>
Type:Object[]
Position:0
Default value:Default properties
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Unique

Gibt an, dass Sort-Object Duplikate eliminiert und nur die eindeutigen Elemente der Auflistung zurückgibt. Die erste instance eines eindeutigen Werts ist in der sortierten Ausgabe enthalten.

Bei Unique wird die Groß-/Kleinschreibung nicht beachtet. Zeichenfolgen, die sich nur nach Groß-/Kleinschreibung 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 pipen.Sort-Object

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 Standardsortiereigenschaften für den Objekttyp angegeben sind. Wenn ein Objekt keine der angegebenen Eigenschaften aufweist, wird der Eigenschaftswert für dieses Objekt als NULL interpretiert Sort-Object und am Ende der Sortierreihenfolge platziert.

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

Wenn Sie nach einer aufgezählten Eigenschaft wie Status sortieren, Sort-Object wird nach den Enumerationswerten sortiert. Beendet hat den Wert 1 und Running hat den Wert 4. Beendet wird vor Ausführen aufgrund der aufgezählten Werte sortiert. Weitere Informationen finden Sie unter ServiceControllerStatus.