Delen via


Sort-Object

Hiermee sorteert u objecten op eigenschapswaarden.

Syntaxis

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

Description

De cmdlet Sort-Object sorteert objecten in oplopende of aflopende volgorde op basis van objecteigenschapswaarden. Als sorteereigenschappen niet zijn opgenomen in een opdracht, gebruikt PowerShell standaard sorteereigenschappen van het eerste invoerobject. Als het type invoerobject geen standaardsorteereigenschappen heeft, probeert PowerShell de objecten zelf te vergelijken. Zie de sectie Notities voor meer informatie.

U kunt objecten sorteren op één eigenschap of meerdere eigenschappen. Meerdere eigenschappen gebruiken hashtabellen om in oplopende volgorde, aflopende volgorde of een combinatie van sorteervolgordes te sorteren. Eigenschappen worden gesorteerd als hoofdlettergevoelig of niet hoofdlettergevoelig. Gebruik de parameter Unique om duplicaten uit de uitvoer te verwijderen.

Voorbeelden

Voorbeeld 1: De huidige map sorteren op naam

In dit voorbeeld worden de bestanden en submappen in een map gesorteerd.

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

De Get-ChildItem cmdlet haalt de bestanden en submappen op uit de map die is opgegeven door de parameter Path, C:\Test. De objecten worden via de pijplijn naar de Sort-Object-cmdlet verzonden. Sort-Object geeft geen eigenschap op, zodat de uitvoer wordt gesorteerd op de standaardsorteereigenschap, Naam.

Voorbeeld 2: de huidige map sorteren op lengte van het bestand

Met deze opdracht worden de bestanden in de huidige map weergegeven op lengte in oplopende volgorde.

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

De Get-ChildItem-cmdlet haalt de bestanden op uit de map die is opgegeven door de parameter Path. De parameter File geeft aan dat Get-ChildItem alleen bestandsobjecten ophaalt. De objecten worden via de pijplijn naar de Sort-Object-cmdlet verzonden. Sort-Object gebruikt de parameter Length om de bestanden te sorteren op lengte in oplopende volgorde.

Voorbeeld 3: Processen sorteren op geheugengebruik

In dit voorbeeld worden processen met het hoogste geheugengebruik weergegeven op basis van de WS-grootte (Werkset).

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

De Get-Process-cmdlet haalt de lijst met processen op de computer op. De procesobjecten worden naar de pijplijn verzonden naar de cmdlet Sort-Object. Sort-Object gebruikt de parameter Eigenschap om de objecten te sorteren op WS-. De objecten worden via de pijplijn naar de Select-Object-cmdlet verzonden. Select-Object gebruikt de parameter Laatste om de laatste vijf objecten op te geven. Dit zijn de objecten met het hoogste WS- gebruik.

Voorbeeld 4: Objecten van HistoryInfo sorteren op id

Met deze opdracht sorteert u de HistoryInfo van de PowerShell-sessie objecten met behulp van de eigenschap Id. Elke PowerShell-sessie heeft een eigen opdrachtgeschiedenis.

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\

Met de Get-History-cmdlet worden de geschiedenisobjecten opgehaald uit de huidige PowerShell-sessie. De objecten worden via de pijplijn naar de Sort-Object-cmdlet verzonden. Sort-Object gebruikt de parameter eigenschap om de objecten te sorteren op id-. De parameter Aflopend sorteert de opdrachtgeschiedenis van nieuw naar oud.

Voorbeeld 5: Een hash-tabel gebruiken om eigenschappen in oplopende en aflopende volgorde te sorteren

In dit voorbeeld worden twee eigenschappen gebruikt om de objecten te sorteren, Status en DisplayName. Status in aflopende volgorde wordt gesorteerd en DisplayName in oplopende volgorde wordt gesorteerd.

Er wordt een hash-tabel gebruikt om de waarde van de eigenschap parameter op te geven. De hashtabel maakt gebruik van een expressie om de eigenschapsnamen en sorteervolgordes op te geven. Zie about_Hash_Tablesvoor meer informatie over hashtabellen.

De eigenschap Status die in de hash-tabel wordt gebruikt, is een opgesomde eigenschap. Zie ServiceControllerStatusvoor meer informatie.

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

De cmdlet Get-Service haalt de lijst met services op de computer op. De serviceobjecten worden naar de pijplijn verzonden naar de cmdlet Sort-Object. Sort-Object gebruikt de parameter eigenschap met een hashtabel om de eigenschapsnamen en sorteervolgordes op te geven. De parameter eigenschap eigenschap wordt gesorteerd op twee eigenschappen, Status in aflopende volgorde en DisplayName- in oplopende volgorde.

Status is een opgesomde eigenschap. gestopte heeft een waarde van 1 en Actief een waarde van 4heeft. De parameter aflopend is ingesteld op $True, zodat actieve processen worden weergegeven voordat processen zijn gestopt. DisplayName stelt de parameter Aflopend in op $False om de weergavenamen in alfabetische volgorde te sorteren.

Voorbeeld 6: Tekstbestanden sorteren op tijdsperiode

Met deze opdracht worden tekstbestanden in aflopende volgorde gesorteerd op basis van de tijdsduur tussen CreationTime en 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

De Get-ChildItem-cmdlet gebruikt de parameter Path om de map C:\Test en alle *.txt-bestanden op te geven. De objecten worden via de pijplijn naar de Sort-Object-cmdlet verzonden. Sort-Object maakt gebruik van de parameter eigenschap eigenschap met een scriptblok om elke tijdsduur tussen CreationTime en LastWriteTimete bepalen.

Voorbeeld 7: Namen sorteren in een tekstbestand

In dit voorbeeld ziet u hoe u een lijst uit een tekstbestand sorteert. Het oorspronkelijke bestand wordt weergegeven als een niet-gesorteerde lijst. Sort-Object de inhoud sorteert en vervolgens de inhoud sorteert met de parameter Unique waarmee duplicaten worden verwijderd.

# 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

De Get-Content-cmdlet gebruikt de parameter Path om de map en bestandsnaam op te geven. Het bestand ServerNames.txt bevat een niet-gesorteerde lijst met computernamen.

De Get-Content-cmdlet gebruikt de parameter Path om de map en bestandsnaam op te geven. Het bestand ServerNames.txt bevat een niet-gesorteerde lijst met computernamen. De objecten worden via de pijplijn naar de Sort-Object-cmdlet verzonden. Sort-Object sorteert de lijst in de standaardvolgorde, oplopend.

De Get-Content-cmdlet gebruikt de parameter Path om de map en bestandsnaam op te geven. Het bestand ServerNames.txt bevat een niet-gesorteerde lijst met computernamen. De objecten worden via de pijplijn naar de Sort-Object-cmdlet verzonden. Sort-Object gebruikt de parameter Unique om dubbele computernamen te verwijderen. De lijst wordt gesorteerd in de standaardvolgorde, oplopend.

Voorbeeld 8: Een tekenreeks sorteren als een geheel getal

In dit voorbeeld ziet u hoe u een tekstbestand sorteert dat tekenreeksobjecten als gehele getallen bevat. U kunt elke opdracht in de pijplijn naar Get-Member verzenden en controleren of de objecten tekenreeksen zijn in plaats van gehele getallen. Voor deze voorbeelden bevat het bestand ProductId.txt een niet-gesorteerde lijst met productnummers.

In het eerste voorbeeld haalt Get-Content de inhoud van het bestand en de pijplijnen op naar de cmdlet Sort-Object. Sort-Object sorteert de tekenreeksobjecten in oplopende volgorde.

# 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

In het tweede voorbeeld haalt Get-Content de inhoud van het bestand en pijplijnen op naar de cmdlet Sort-Object. Sort-Object gebruikt een scriptblok om de tekenreeksen te converteren naar gehele getallen. In de voorbeeldcode converteert [int] de tekenreeks naar een geheel getal en $_ elke tekenreeks vertegenwoordigt, omdat deze uit de pijplijn komt. De gehele objecten worden naar de pijplijn verzonden naar de cmdlet Sort-Object. Sort-Object sorteert de gehele getallen in numerieke volgorde.

Voorbeeld 9: Sorteren op meerdere eigenschappen

Als u wilt sorteren op meerdere eigenschappen, scheidt u de eigenschappen op komma's.

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

De Get-ChildItem-cmdlet haalt de bestanden op uit de map die is opgegeven door de parameter Path. De objecten worden via de pijplijn naar de Sort-Object-cmdlet verzonden. Sort-Object gebruikt de parameter Length en Name om de bestanden te sorteren op lengte in oplopende volgorde. Omdat File01.txt en File03.txt dezelfde lengte hebben, worden ze verder gesorteerd op hun eigenschap Naam.

Voorbeeld 10: Hashtables sorteren op hun sleutelwaarden met berekende eigenschappen

In dit voorbeeld ziet u hoe u hashtabel objecten kunt sorteren op basis van de waarde van de sleutels. U kunt een of meer scriptblokkeringen opgeven voor de parameter eigenschap. De expressies in deze scriptblokkeringen worden gebruikt om de sorteervolgorde voor de invoer te bepalen, zoals de waarden voor benoemde eigenschappen.

@(
    @{ 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 }

Met de expressies { $_.weight } en { $_.name } worden de invoerhashtabellen eerst gesorteerd op de waarde van de weight sleutel en vervolgens op de waarde van de name sleutel. De opdracht Sort-Object gebruikt de parameter OutVariable om het resultaat op te slaan in een variabele en het resultaat in dezelfde aanroep weer te geven.

Met de laatste opdracht worden de gesorteerde hashtabellen herhaald om hun naam en gewicht weer te geven als een tekenreeks.

Parameters

-CaseSensitive

Geeft aan dat de sortering hoofdlettergevoelig is. Sorteringen zijn standaard niet hoofdlettergevoelig.

Type:SwitchParameter
Position:Named
Default value:Case-insensitive
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-Culture

Hiermee geeft u de culturele configuratie te gebruiken voor sorteringen. Gebruik Get-Culture om de cultuurconfiguratie van het systeem weer te geven.

Type:String
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-Descending

Geeft aan dat Sort-Object de objecten in aflopende volgorde sorteert. De standaardvolgorde is oplopend.

Als u meerdere eigenschappen met verschillende sorteervolgordes wilt sorteren, gebruikt u een hash-tabel. Met een hash-tabel kunt u bijvoorbeeld de ene eigenschap in oplopende volgorde en een andere eigenschap in aflopende volgorde sorteren.

Type:SwitchParameter
Position:Named
Default value:Ascending
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-InputObject

Als u objecten wilt sorteren, verzendt u ze omlaag in de pijplijn naar Sort-Object. Als u de parameter InputObject gebruikt om een verzameling items te verzenden, ontvangt Sort-Object één object dat de verzameling vertegenwoordigt. Omdat één object niet kan worden gesorteerd, retourneert Sort-Object de hele verzameling ongewijzigd.

Type:PSObject
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:True
Jokertekens accepteren:False

-Property

Hiermee geeft u de eigenschapsnamen op die Sort-Object gebruikt om de objecten te sorteren. Jokertekens zijn toegestaan. Objecten worden gesorteerd op basis van de eigenschapswaarden. Als u geen eigenschap opgeeft, Sort-Object sorteert op basis van standaardeigenschappen voor het objecttype of de objecten zelf.

Gebruik komma's om meerdere eigenschappen te scheiden. Meerdere eigenschappen kunnen worden gesorteerd in oplopende volgorde, aflopende volgorde of een combinatie van sorteervolgordes. Wanneer u meerdere eigenschappen opgeeft, worden de objecten gesorteerd op de eerste eigenschap. Als meerdere objecten dezelfde waarde hebben voor de eerste eigenschap, worden deze objecten gesorteerd op de tweede eigenschap. Dit proces wordt voortgezet totdat er geen opgegeven eigenschappen meer zijn of geen groepen objecten.

De waarde van de eigenschap parameter kan een berekende eigenschap zijn. Als u een berekende eigenschap wilt maken, gebruikt u een scriptblok of een hashtabel.

Geldige sleutels voor een hash-tabel zijn als volgt:

  • expression - <string> of <script block>
  • ascending of descending - <boolean>

Zie about_Calculated_Propertiesvoor meer informatie.

Type:Object[]
Position:0
Default value:Default properties
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:True

-Unique

Geeft aan dat Sort-Object duplicaten elimineert en alleen de unieke leden van de verzameling retourneert. Het eerste exemplaar van een unieke waarde wordt opgenomen in de gesorteerde uitvoer.

Unieke is niet hoofdlettergevoelig. Tekenreeksen die alleen per tekencase verschillen, worden als hetzelfde beschouwd. Bijvoorbeeld teken en TEKEN.

Type:SwitchParameter
Position:Named
Default value:All
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

Invoerwaarden

PSObject

U kunt de objecten doorsluisen die naar deze cmdlet moeten worden gesorteerd.

Uitvoerwaarden

PSObject

Met deze cmdlet worden de gesorteerde objecten geretourneerd.

Notities

Windows PowerShell bevat de volgende aliassen voor Sort-Object:

  • sort

De Sort-Object cmdlet sorteert objecten op basis van eigenschappen die zijn opgegeven in de opdracht of de standaard sorteereigenschappen voor het objecttype. Standaardsorteringseigenschappen worden gedefinieerd met behulp van de PropertySet met de naam DefaultKeyPropertySet in een types.ps1xml-bestand. Zie about_Types.ps1xmlvoor meer informatie.

Als een object geen van de opgegeven eigenschappen heeft, wordt de eigenschapswaarde voor dat object geïnterpreteerd door Sort-Object als Null- en aan het einde van de sorteervolgorde geplaatst.

Als er geen sorteereigenschappen beschikbaar zijn, probeert PowerShell de objecten zelf te vergelijken. Sort-Object gebruikt de methode Vergelijken voor elke eigenschap. Als een eigenschap geen IComparableimplementeert, converteert de cmdlet de eigenschapswaarde naar een tekenreeks en gebruikt de methode Compare voor System.String. Zie PSObject.CompareTo(Object) Methodvoor meer informatie.

Als u sorteert op een geïnventareerde eigenschap zoals Status, Sort-Object sorteert op de opsommingswaarden. Voor Windows-services heeft gestopte een waarde van 1 en heeft Actief een waarde van 4. gestopt wordt gesorteerd voordat wordt uitgevoerd vanwege de opgesomde waarden. Zie ServiceControllerStatusvoor meer informatie.