Delen via


Sort-Object

Objecten sorteren op eigenschapswaarden.

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

Description

De Sort-Object cmdlet 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 van het 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 op meerdere eigenschappen. Meerdere eigenschappen gebruiken hash-tabellen om te sorteren in oplopende volgorde, aflopende volgorde of een combinatie van sorteervolgordes. 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 path-parameter , C:\Test. De objecten worden door de pijplijn naar de Sort-Object cmdlet verzonden. Sort-Object geeft geen eigenschap op, dus de uitvoer wordt gesorteerd op de standaardsorteereigenschap Naam.

Voorbeeld 2: De huidige map sorteren op bestandslengte

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 path parameter . De parameter Bestand geeft aan dat Get-ChildItem alleen bestandsobjecten worden opgehaald. De objecten worden door de pijplijn naar de Sort-Object cmdlet verzonden. Sort-Object gebruikt de parameter Length om de bestanden in oplopende volgorde op lengte te sorteren.

Voorbeeld 3: Processen sorteren op geheugengebruik

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

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 die op de computer worden uitgevoerd. De procesobjecten worden via de pijplijn naar de Sort-Object cmdlet verzonden. Sort-Object gebruikt de parameter Eigenschap om de objecten te sorteren op WS. De objecten worden door de pijplijn naar de Select-Object cmdlet verzonden. Select-Object gebruikt de parameter Last om de laatste vijf objecten op te geven. Dit zijn de objecten met het hoogste WS-gebruik .

In PowerShell 6 is de Sort-Object parameter Bottom een alternatief voor Select-Object. Bijvoorbeeld Get-Process | Sort-Object -Property WS -Bottom 5.

Voorbeeld 4: HistoryInfo-objecten sorteren op id

Met deze opdracht worden de HistoryInfo-objecten van de PowerShell-sessie gesorteerd 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\

De Get-History cmdlet haalt de geschiedenisobjecten op uit de huidige PowerShell-sessie. De objecten worden door 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. De status wordt in aflopende volgorde gesorteerd en DisplayName in oplopende volgorde.

Er wordt een hashtabel gebruikt om de waarde van de eigenschapsparameter op te geven. De hashtabel maakt gebruik van een expressie om de eigenschapsnamen en sorteervolgordes op te geven. Zie about_Hash_Tables voor meer informatie over hash-tabellen.

De eigenschap Status die in de hashtabel wordt gebruikt, is een geïnventareerde eigenschap. Zie ServiceControllerStatus voor 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 Get-Service cmdlet haalt de lijst met services op de computer op. De serviceobjecten worden door de pijplijn naar de Sort-Object cmdlet verzonden. Sort-Object gebruikt de parameter Eigenschap met een hash-tabel om de eigenschapsnamen en sorteervolgordes op te geven. De parameter Property wordt gesorteerd op twee eigenschappen: Status in aflopende volgorde en DisplayName in oplopende volgorde.

Status is een opgesomde eigenschap. Gestopt heeft de waarde 1 en Uitvoeren heeft de waarde 4. De parameter Aflopend is ingesteld op $True zodat Actieve processen worden weergegeven vóór Gestopte processen. DisplayName stelt de parameter Aflopend in op $False om de weergavenamen in alfabetische volgorde te sorteren.

Voorbeeld 6: tekstbestanden sorteren op tijdsspanne

Met deze opdracht worden tekstbestanden in aflopende volgorde gesorteerd op 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 door de pijplijn naar de Sort-Object cmdlet verzonden. Sort-Object gebruikt de parameter Property met een scriptblock om de tijdsduur van elke bestand tussen CreationTime en LastWriteTime te bepalen.

Voorbeeld 7: Namen in een tekstbestand sorteren

In dit voorbeeld ziet u hoe u een lijst sorteert op basis van een tekstbestand. Het oorspronkelijke bestand wordt weergegeven als een niet-gesorteerde lijst. Sort-Object sorteert de inhoud en sorteert vervolgens de inhoud met de parameter Uniek , 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 door 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 door 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 met tekenreeksobjecten als gehele getallen sorteert. U kunt elke opdracht in de pijplijn verzenden naar Get-Member en controleren of de objecten tekenreeksen zijn in plaats van gehele getallen. Voor deze voorbeelden bevat het ProductId.txt bestand een niet-gesorteerde lijst met productnummers.

In het eerste voorbeeld Get-Content haalt u de inhoud van het bestand en pijplijnen op naar de Sort-Object cmdlet. 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 Get-Content haalt u de inhoud van het bestand en pijplijnen op naar de Sort-Object cmdlet. Sort-Object gebruikt een scriptblok om de tekenreeksen te converteren naar gehele getallen. In de voorbeeldcode [int] converteert u de tekenreeks naar een geheel getal en $_ vertegenwoordigt u elke tekenreeks wanneer deze in de pijplijn komt. De gehele objecten worden door de pijplijn naar de Sort-Object cmdlet verzonden. Sort-Object sorteert de gehele objecten in numerieke volgorde.

Voorbeeld 9: Stabiele sorteringen gebruiken

Wanneer u de parameters Top, Bottom of Stable gebruikt, worden de gesorteerde objecten geleverd in de volgorde waarin ze zijn ontvangen Sort-Object wanneer de sorteercriteria gelijk zijn. In dit voorbeeld sorteren we de getallen één tot en met 20 op de waarde 'modulo 3'. De modulo-waarde varieert van nul tot twee.

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

De uitvoer van de eerste sortering is correct gegroepeerd op de moduluswaarde, maar de afzonderlijke items worden niet binnen het modulusbereik gesorteerd. De tweede sortering gebruikt de optie Stabiel om een stabiele sortering te retourneren.

Voorbeeld 10: 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 path parameter . De objecten worden door de pijplijn naar de Sort-Object cmdlet verzonden. Sort-Object gebruikt de parameter Lengte en Naam om de bestanden in oplopende volgorde op lengte te sorteren. Omdat File01.txt en File03.txt dezelfde lengte hebben, worden ze verder gesorteerd op hun eigenschap Naam.

Voorbeeld 11: Hashtables sorteren op sleutelwaarde

Vanaf PowerShell 6 Sort-Object ondersteunt het sorteren van hashtabelinvoer op sleutelwaarden. In het volgende voorbeeld wordt een matrix van hashtables gesorteerd op de waarde van de sleutel van elke hashtable weight .

@(
    @{ name = 'a' ; weight = 7 }
    @{ name = 'b' ; weight = 1 }
    @{ name = 'c' ; weight = 3 }
    @{ name = 'd' ; weight = 7 }
) | Sort-Object -Property weight -OutVariable Sorted

$Sorted | ForEach-Object -Process { "{0}: {1}" -f $_.name, $_.weight }

Name                           Value
----                           -----
Weight                         1
Name                           b
Weight                         3
Name                           c
Weight                         7
Name                           a
Weight                         7
Name                           d

b: 1
c: 3
a: 7
d: 7

Parameters

-Bottom

Hiermee geeft u het aantal objecten op dat moet worden opgehaald aan het einde van een gesorteerde objectmatrix. Dit resulteert in een stabiele sortering.

Deze parameter is geïntroduceerd in PowerShell 6.0.

Type:Int32
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-CaseSensitive

Geeft aan dat de sortering hoofdlettergevoelig is. Standaard zijn sorteringen niet hoofdlettergevoelig.

Type:SwitchParameter
Position:Named
Default value:Case-insensitive
Required:False
Accept pipeline input:False
Accept wildcard characters: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
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Descending

Hiermee wordt aangegeven dat Sort-Object de objecten in aflopende volgorde worden gesorteerd. De standaardwaarde is oplopende volgorde.

Als u meerdere eigenschappen met verschillende sorteervolgordes wilt sorteren, gebruikt u een hashtabel. Met een hashtabel kunt u bijvoorbeeld één eigenschap in oplopende volgorde en een andere eigenschap in aflopende volgorde sorteren.

Type:SwitchParameter
Position:Named
Default value:Ascending
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

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

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Property

Hiermee geeft u de eigenschapsnamen op die Sort-Object worden 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 u op basis van standaardeigenschappen voor het objecttype of de objecten zelf.

Gebruik komma's om meerdere eigenschappen van elkaar 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 gaat door totdat er geen opgegeven eigenschappen of groepen objecten meer zijn opgegeven.

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

Geldige sleutels voor een hash-tabel zijn als volgt:

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

Zie about_Calculated_Properties voor meer informatie.

Type:Object[]
Position:0
Default value:Default properties
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Stable

De gesorteerde objecten worden geleverd in de volgorde waarin ze zijn ontvangen wanneer de sorteercriteria gelijk zijn.

Deze parameter is toegevoegd in PowerShell v6.2.0.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Top

Hiermee geeft u het aantal objecten op dat moet worden opgehaald vanaf het begin van een gesorteerde objectmatrix. Dit resulteert in een stabiele sortering.

Deze parameter is geïntroduceerd in PowerShell 6.0.

Type:Int32
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Unique

Hiermee wordt aangegeven dat Sort-Object dubbele waarden worden geëlimineerd en alleen de unieke leden van de verzameling worden geretourneerd. Het eerste exemplaar van een unieke waarde wordt opgenomen in de gesorteerde uitvoer.

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

Type:SwitchParameter
Position:Named
Default value:All
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Invoerwaarden

PSObject

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

Uitvoerwaarden

PSObject

Deze cmdlet retourneert de gesorteerde objecten.

Notities

PowerShell bevat de volgende aliassen voor Sort-Object:

  • Windows:
    • sort

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

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

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

Als u sorteert op een geïnventareerde eigenschap, zoals Status, Sort-Object wordt gesorteerd op de opsommingswaarden. Voor Windows-services heeft Gestopt de waarde 1 en Uitvoeren de waarde 4. Gestopt wordt gesorteerd vóór Uitvoering vanwege de geïnventareerde waarden. Zie ServiceControllerStatus voor meer informatie.

De prestaties van het sorteeralgoritmen zijn langzamer bij het uitvoeren van een stabiele sortering.