Sort-Object

Sorterar objekt efter egenskapsvärden.

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

Cmdleten Sort-Object sorterar objekt i stigande eller fallande ordning baserat på objektegenskapsvärden. Om sorteringsegenskaper inte ingår i ett kommando använder PowerShell standardsorteringsegenskaperna för det första indataobjektet. Om typen av indataobjekt inte har några standardsorteringsegenskaper försöker PowerShell jämföra själva objekten. Mer information finns i avsnittet Anteckningar .

Du kan sortera objekt efter en enskild egenskap eller flera egenskaper. Flera egenskaper använder hash-tabeller för att sortera i stigande ordning, fallande ordning eller en kombination av sorteringsordningar. Egenskaper sorteras som skiftlägeskänsliga eller skiftlägeskänsliga. Använd parametern Unik för att eliminera dubbletter från utdata.

Exempel

Exempel 1: Sortera den aktuella katalogen efter namn

I det här exemplet sorteras filerna och underkatalogerna i en katalog.

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

Cmdleten Get-ChildItem hämtar filerna och underkatalogerna från katalogen som anges av parametern Path , C:\Test. Objekten skickas nedåt i pipelinen till cmdleten Sort-Object . Sort-Object anger inte en egenskap så utdata sorteras efter standardsorteringsegenskapen Name.

Exempel 2: Sortera den aktuella katalogen efter fillängd

Det här kommandot visar filerna i den aktuella katalogen efter längd i stigande ordning.

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

Cmdleten Get-ChildItem hämtar filerna från katalogen som anges av parametern Path . Parametern File anger att Get-ChildItem endast hämtar filobjekt. Objekten skickas nedåt i pipelinen till cmdleten Sort-Object . Sort-Object använder parametern Length för att sortera filerna efter längd i stigande ordning.

Exempel 3: Sortera processer efter minnesanvändning

I det här exemplet visas processer med den högsta minnesanvändningen baserat på deras arbetsuppsättningsstorlek (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

Cmdleten Get-Process hämtar listan över processer som körs på datorn. Processobjekten skickas ned i pipelinen till cmdleten Sort-Object . Sort-Object använder parametern Egenskap för att sortera objekten efter WS. Objekten skickas nedåt i pipelinen till cmdleten Select-Object . Select-Object använder parametern Last för att ange de sista fem objekten, som är de objekt som har den högsta WS-användningen .

I PowerShell 6 är parametern Sort-ObjectBottom ett alternativ till Select-Object. Till exempel Get-Process | Sort-Object -Property WS -Bottom 5.

Exempel 4: Sortera HistoryInfo-objekt efter ID

Det här kommandot sorterar PowerShell-sessionens HistoryInfo-objekt med hjälp av ID-egenskapen . Varje PowerShell-session har sin egen kommandohistorik.

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\

Cmdleten Get-History hämtar historikobjekten från den aktuella PowerShell-sessionen. Objekten skickas nedåt i pipelinen till cmdleten Sort-Object . Sort-Object använder parametern Egenskap för att sortera objekten efter ID. Parametern Descending sorterar kommandohistoriken från den senaste till den äldsta.

Exempel 5: Använd en hash-tabell för att sortera egenskaper i stigande och fallande ordning

I det här exemplet används två egenskaper för att sortera objekten Status och DisplayName. Status sorteras i fallande ordning och DisplayName sorteras i stigande ordning.

En hash-tabell används för att ange egenskapsparameterns värde. Hash-tabellen använder ett uttryck för att ange egenskapsnamn och sorteringsordningar. Mer information om hash-tabeller finns i about_Hash_Tables.

Egenskapen Status som används i hash-tabellen är en uppräknad egenskap. Mer information finns i 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

Cmdleten Get-Service hämtar listan över tjänster på datorn. Tjänstobjekten skickas nedåt i pipelinen till cmdleten Sort-Object . Sort-Object använder parametern Egenskap med en hash-tabell för att ange egenskapsnamn och sorteringsordningar. Parametern Egenskap sorteras efter två egenskaper, Status i fallande ordning och DisplayName i stigande ordning.

Status är en uppräknad egenskap. Stoppad har värdet 1 och Körning har värdet 4. Parametern Descending (Fallande ) är inställd på $True så att Processer som körs visas före stoppade processer. DisplayName anger parametern Descending till för $False att sortera visningsnamnen i alfabetisk ordning.

Exempel 6: Sortera textfiler efter tidsintervall

Det här kommandot sorterar textfiler i fallande ordning efter tidsintervallet mellan CreationTime och 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

Cmdleten Get-ChildItem använder parametern Path för att ange katalogen C:\Test och alla *.txt filer. Objekten skickas nedåt i pipelinen till cmdleten Sort-Object . Sort-Objectanvänder egenskapsparametern med en scriptblock för att fastställa varje tidsintervall för filer mellan CreationTime och LastWriteTime.

Exempel 7: Sortera namn i en textfil

Det här exemplet visar hur du sorterar en lista från en textfil. Den ursprungliga filen visas som en osorterad lista. Sort-Object sorterar innehållet och sorterar sedan innehållet med den unika parametern som tar bort dubbletter.

# 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

Cmdleten Get-Content använder parametern Path för att ange katalogen och filnamnet. Filen ServerNames.txt innehåller en osorterad lista över datornamn.

Cmdleten Get-Content använder parametern Path för att ange katalogen och filnamnet. Filen ServerNames.txt innehåller en osorterad lista över datornamn. Objekten skickas nedåt i pipelinen till cmdleten Sort-Object . Sort-Object sorterar listan i standardordningen stigande.

Cmdleten Get-Content använder parametern Path för att ange katalogen och filnamnet. Filen ServerNames.txt innehåller en osorterad lista över datornamn. Objekten skickas nedåt i pipelinen till cmdleten Sort-Object . Sort-Object använder den unika parametern för att ta bort dubbletter av datornamn. Listan sorteras i standardordningen stigande.

Exempel 8: Sortera en sträng som ett heltal

Det här exemplet visar hur du sorterar en textfil som innehåller strängobjekt som heltal. Du kan skicka varje kommando nedåt i pipelinen till Get-Member och kontrollera att objekten är strängar i stället för heltal. I de här exemplen ProductId.txt innehåller filen en osorterad lista med produktnummer.

I det första exemplet Get-Content hämtar innehållet i filen och hämtar raderna till cmdleten Sort-Object . Sort-Object sorterar strängobjekten i stigande ordning.

# 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

I det andra exemplet Get-Content hämtar innehållet i filen och hämtar raderna till cmdleten Sort-Object . Sort-Object använder ett skriptblock för att konvertera strängarna till heltal. I exempelkoden [int] konverterar strängen till ett heltal och $_ representerar varje sträng när den kommer ned i pipelinen. Heltalsobjekten skickas nedåt i pipelinen till cmdleten Sort-Object . Sort-Object sorterar heltalsobjekten i numerisk ordning.

Exempel 9: Använda stabila sorteringar

När du använder parametrarna Top, Bottom eller Stable levereras de sorterade objekten i den ordning de togs emot av Sort-Object när sorteringskriterierna är lika. I det här exemplet sorterar vi talen en till och med 20 med värdet "modulo 3". Modulo-värdet sträcker sig från noll till två.

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

Utdata från den första sorteringen grupperas korrekt efter modulus-värdet, men de enskilda objekten sorteras inte inom modulus-intervallet. Den andra sorteringen använder alternativet Stabil för att returnera en stabil sortering.

Exempel 10: Sortera efter flera egenskaper

Om du vill sortera efter flera egenskaper avgränsar du egenskaperna med kommatecken.

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

Cmdleten Get-ChildItem hämtar filerna från katalogen som anges av parametern Path . Objekten skickas nedåt i pipelinen till cmdleten Sort-Object . Sort-Object använder parametern Längd och Namn för att sortera filerna efter längd i stigande ordning. Eftersom File01.txt och File03.txt har samma längd sorteras de ytterligare efter egenskapsnamnet.

Parametrar

-Bottom

Anger antalet objekt som ska hämtas från slutet av en sorterad objektmatris. Detta resulterar i en stabil sortering.

Den här parametern introducerades i PowerShell 6.0.

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

-CaseSensitive

Anger att sorteringen är skiftlägeskänslig. Som standard är sorteringar inte skiftlägeskänsliga.

Type:SwitchParameter
Position:Named
Default value:Case-insensitive
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Culture

Anger den kulturella konfiguration som ska användas för sortering. Använd Get-Culture för att visa systemets kulturkonfiguration.

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

-Descending

Anger att Sort-Object sorterar objekten i fallande ordning. Standardvärdet är stigande ordning.

Om du vill sortera flera egenskaper med olika sorteringsordningar använder du en hash-tabell. Med en hash-tabell kan du till exempel sortera en egenskap i stigande ordning och en annan egenskap i fallande ordning.

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

-InputObject

Om du vill sortera objekt skickar du dem nedåt i pipelinen till Sort-Object. Om du använder parametern InputObject för att skicka en samling objekt tar Sort-Object emot ett objekt som representerar samlingen. Eftersom ett objekt inte kan sorteras Sort-Object returnerar hela samlingen oförändrad.

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

-Property

Anger de egenskapsnamn som Sort-Object används för att sortera objekten. Jokertecken tillåts. Objekt sorteras baserat på egenskapsvärdena. Om du inte anger en egenskap Sort-Object sorterar baserat på standardegenskaperna för objekttypen eller själva objekten.

Använd kommatecken för att avgränsa flera egenskaper. Flera egenskaper kan sorteras i stigande ordning, fallande ordning eller en kombination av sorteringsordningar. När du anger flera egenskaper sorteras objekten efter den första egenskapen. Om flera objekt har samma värde för den första egenskapen sorteras dessa objekt efter den andra egenskapen. Den här processen fortsätter tills det inte finns några fler angivna egenskaper eller inga grupper av objekt.

Egenskapsparameterns värde kan vara en beräknad egenskap. Om du vill skapa en beräknad egenskap använder du en scriptblock eller en hashtable.

Giltiga nycklar för en hash-tabell är följande:

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

Mer information finns i about_Calculated_Properties.

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

-Stable

De sorterade objekten levereras i den ordning de togs emot när sorteringskriterierna är lika.

Den här parametern lades till i PowerShell v6.2.0.

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

-Top

Anger antalet objekt som ska hämtas från början av en sorterad objektmatris. Detta resulterar i en stabil sortering.

Den här parametern introducerades i PowerShell 6.0.

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

-Unique

Anger att Sort-Object eliminerar dubbletter och endast returnerar de unika medlemmarna i samlingen. Den första instansen av ett unikt värde ingår i de sorterade utdata.

Unikt är skiftlägesokänsligt. Strängar som bara skiljer sig åt efter teckenfall anses vara desamma. Till exempel tecken och CHARACTER.

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

Indata

PSObject

Du kan skicka objekten som ska sorteras till Sort-Object.

Utdata

PSObject

Sort-Object returnerar de sorterade objekten.

Kommentarer

Cmdleten Sort-Object sorterar objekt baserat på egenskaper som anges i kommandot eller standardsorteringsegenskaperna för objekttypen. Standardsorteringsegenskaper definieras med hjälp av namnet PropertySetDefaultKeyPropertySet i en types.ps1xml fil. Mer information finns i about_Types.ps1xml.

Om ett objekt inte har någon av de angivna egenskaperna tolkas egenskapsvärdet Sort-Object för objektet med som Null och placeras i slutet av sorteringsordningen.

När det inte finns några sorteringsegenskaper försöker PowerShell jämföra själva objekten. Sort-Object använder metoden Compare för varje egenskap. Om en egenskap inte implementerar IComparable konverterar cmdleten egenskapsvärdet till en sträng och använder metoden Compare för System.String. Mer information finns i PSObject.CompareTo(Object)-metoden.

Om du sorterar efter en uppräknad egenskap, till exempel Status, Sort-Object sorterar du efter uppräkningsvärdena. För Windows-tjänster har Stopped värdet 1 och Körs har värdet 4. Stoppad sorteras före Körning på grund av de uppräknade värdena. Mer information finns i ServiceControllerStatus.

Sorteringsalgoritmens prestanda är långsammare när du utför en stabil sortering.