Aracılığıyla paylaş


Sort-Object

Nesneleri özellik değerlerine göre sıralar.

Sözdizimi

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

Sort-Object cmdlet'i nesneleri nesne özelliği değerlerine göre artan veya azalan düzende sıralar. Sıralama özellikleri bir komuta dahil değilse PowerShell, ilk giriş nesnesinin varsayılan sıralama özelliklerini kullanır. Giriş nesnesinin türü varsayılan sıralama özelliklerine sahip değilse, PowerShell nesneleri karşılaştırmayı dener. Daha fazla bilgi için Notlar bölümüne bakın.

Nesneleri tek bir özelliğe veya birden çok özelliğe göre sıralayabilirsiniz. Birden çok özellik artan düzende, azalan düzende veya sıralama düzenlerinin birleşiminde sıralamak için karma tabloları kullanır. Özellikler büyük/küçük harfe duyarlı veya büyük/küçük harfe duyarlı olarak sıralanır. Çıktıdan yinelenenleri kaldırmak için Benzersiz parametresini kullanın.

Örnekler

Örnek 1: Geçerli dizini ada göre sıralama

Bu örnek, dizindeki dosyaları ve alt dizinleri sıralar.

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

Get-ChildItem cmdlet'i, C:\Test parametresi tarafından belirtilen dizinden dosyaları ve alt dizinleri alır. Nesneler işlem hattına Sort-Object cmdlet'ine gönderilir. Sort-Object bir özellik belirtmediğinden çıktı varsayılan sıralama özelliğine göre sıralanır Ad.

Örnek 2: Geçerli dizini dosya uzunluğuna göre sıralama

Bu komut geçerli dizindeki dosyaları artan düzende uzunluğa göre görüntüler.

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

Get-ChildItem cmdlet'i, dosyaları Path parametresi tarafından belirtilen dizinden alır. Dosya parametresi, Get-ChildItem yalnızca dosya nesnelerini aldığını belirtir. Nesneler işlem hattına Sort-Object cmdlet'ine gönderilir. Sort-Object, dosyaları artan düzende uzunluğa göre sıralamak için Length parametresini kullanır.

Örnek 3: İşlemleri bellek kullanımına göre sıralama

Bu örnekte, çalışma kümesi (WS) boyutuna göre en yüksek bellek kullanımına sahip işlemler görüntülenir.

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

Get-Process cmdlet'i bilgisayarda çalışan işlemlerin listesini alır. İşlem nesneleri işlem hattına Sort-Object cmdlet'ine gönderilir. Sort-Object, nesneleri WSgöre sıralamak için Özelliği parametresini kullanır. Nesneler işlem hattına Select-Object cmdlet'ine gönderilir. Select-Object, WS kullanımı en yüksek olan nesneler olan son beş nesneyi belirtmek içinLast parametresini kullanır.

PowerShell 6'da, Alt Sort-Object parametresi Select-Objectalternatiftir. Örneğin, Get-Process | Sort-Object -Property WS -Bottom 5.

Örnek 4: HistoryInfo nesnelerini kimliklerine göre sıralama

Bu komut, Kimliği özelliğini kullanarak PowerShell oturumunun HistoryInfo nesnelerini sıralar. Her PowerShell oturumlarının kendi komut geçmişi vardır.

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\

Get-History cmdlet'i geçerli PowerShell oturumundaki geçmiş nesnelerini alır. Nesneler işlem hattına Sort-Object cmdlet'ine gönderilir. Sort-Object, nesneleri Kimliğine göre sıralamak için Özelliği parametresini kullanır. Azalan parametresi, komut geçmişini en yeniden en eskiye doğru sıralar.

Örnek 5: Özellikleri artan ve azalan düzende sıralamak için karma tablo kullanma

Bu örnekte, Status ve DisplayName nesneleri sıralamak için iki özellik kullanılır. Durum azalan düzende sıralanır ve DisplayName artan düzende sıralanır.

Özelliği parametresinin değerini belirtmek için karma tablo kullanılır. Karma tablo, özellik adlarını ve sıralama düzenlerini belirtmek için bir ifade kullanır. Karma tablolar hakkında daha fazla bilgi için bkz. about_Hash_Tables.

Karma tabloda kullanılan Durum özelliği numaralandırılmış bir özelliktir. Daha fazla bilgi için bkz. 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

Get-Service cmdlet'i bilgisayardaki hizmetlerin listesini alır. Hizmet nesneleri işlem hattı Sort-Object cmdlet'ine gönderilir. Sort-Object özellik adlarını ve sıralama düzenlerini belirtmek için karma tabloyla Özelliği parametresini kullanır. Özelliği parametresi, Durum azalan düzende ve DisplayName artan düzende iki özelliğe göre sıralanır.

Durum numaralandırılmış bir özelliktir. Durduruldu değeri 1 ve Çalışan değeri 4 değerine sahiptir. Azalan parametresi $true olarak ayarlanır, böylece Çalışan işlemleri Durduruldu işlemlerinden önce görüntülenir. DisplayName, görünen adları alfabetik düzende sıralamak için Azalan parametresini $false olarak ayarlar.

Örnek 6: Metin dosyalarını zaman aralığına göre sıralama

Bu komut, metin dosyalarını CreationTime ile LastWriteTimearasındaki zaman aralığına göre azalan düzende sıralar.

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

Get-ChildItem cmdlet'i dizin ve tüm C:\Test dosyalarını belirtmek için *.txt parametresini kullanır. Nesneler işlem hattına Sort-Object cmdlet'ine gönderilir. Sort-Object, CreationTime ile LastWriteTimearasındaki her dosyanın zaman aralığını belirlemek için Özelliği parametresini bir betik bloğuyla birlikte kullanır.

Örnek 7: Metin dosyasında adları sıralama

Bu örnekte, bir metin dosyasından listenin nasıl sıralanacağını gösterilmektedir. Özgün dosya sıralanmamış bir liste olarak görüntülenir. Sort-Object içeriği sıralar ve sonra yinelenenleri kaldıran benzersiz parametresiyle içeriği sıralar.

# 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

Get-Content cmdlet'i dizin ve dosya adını belirtmek için Path parametresini kullanır. dosya ServerNames.txt bilgisayar adlarının sıralanmamış bir listesini içerir.

Get-Content cmdlet'i dizin ve dosya adını belirtmek için Path parametresini kullanır. dosya ServerNames.txt bilgisayar adlarının sıralanmamış bir listesini içerir. Nesneler işlem hattına Sort-Object cmdlet'ine gönderilir. Sort-Object listeyi varsayılan düzende artan düzende sıralar.

Get-Content cmdlet'i dizin ve dosya adını belirtmek için Path parametresini kullanır. dosya ServerNames.txt bilgisayar adlarının sıralanmamış bir listesini içerir. Nesneler işlem hattına Sort-Object cmdlet'ine gönderilir. Sort-Object yinelenen bilgisayar adlarını kaldırmak için Benzersiz parametresini kullanır. Liste, varsayılan düzende artan düzende sıralanır.

Örnek 8: Dizeyi tamsayı olarak sıralama

Bu örnek, dize nesnelerini tamsayı olarak içeren bir metin dosyasının nasıl sıralanacağını gösterir. her komutu Get-Member için işlem hattına gönderebilir ve nesnelerin tamsayılar yerine dizeler olduğunu doğrulayabilirsiniz. Bu örnekler için, ProductId.txt dosyası sıralanmamış bir ürün numarası listesi içerir.

İlk örnekte, Get-Content dosyanın içeriğini alır ve satırlarını Sort-Object cmdlet'ine aktarır. Sort-Object dize nesnelerini artan düzende sıralar.

# 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

İkinci örnekte, Get-Content dosya içeriğini alır ve Sort-Object cmdlet'ine satırlar oluşturur. Sort-Object dizeleri tamsayılara dönüştürmek için bir betik bloğu kullanır. Örnek kodda, [int] dizeyi bir tamsayıya dönüştürür ve $_ işlem hattında her dizeyi temsil eder. Tamsayı nesneleri, işlem hattından Sort-Object cmdlet'ine gönderilir. Sort-Object tamsayı nesnelerini sayısal düzende sıralar.

Örnek 9: Kararlı sıralamaları kullanma

Top, Bottomveya Stable parametrelerini kullandığınızda, sıralanmış nesneler sıralama ölçütleri eşit olduğunda Sort-Object tarafından alındıkları sırayla teslim edilir. Bu örnekte, sayıları 'modulo 3' değerine göre bir ile 20 arasında sıralıyoruz. Modül değeri sıfırdan ikiye kadar değişir.

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

İlk sıralamadan elde edilen çıkış modül değerine göre doğru şekilde gruplandırılır, ancak tek tek öğeler modül aralığı içinde sıralanmamıştır. İkinci sıralama, kararlı bir sıralama döndürmek için Kararlı seçeneğini kullanır.

Örnek 10: Birden çok özelliğe göre sıralama

Birden çok özelliğe göre sıralamak istiyorsanız, özellikleri virgülle ayırın.

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

Get-ChildItem cmdlet'i, dosyaları Path parametresi tarafından belirtilen dizinden alır. Nesneler işlem hattına Sort-Object cmdlet'ine gönderilir. Sort-Object, dosyaları uzunluğa göre artan düzende sıralamak için Uzunluk ve Adı parametresini kullanır. File01.txt ve File03.txt aynı uzunlukta olduğundan, ad özelliklerine göre daha da sıralanırlar.

Örnek 11: Karma tablolarını anahtar değerine göre sıralama

PowerShell 6'da Sort-Object, anahtar değerlerine göre karma tablo girişi sıralamayı destekler. Aşağıdaki örnek, bir karma tablo dizisini her karma tablo weight anahtarının değerine göre sıralar.

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

Parametreler

-Bottom

Sıralanmış nesne dizisinin sonundan alınacak nesne sayısını belirtir. Bu, kararlı bir sıralamayla sonuçlanır.

Bu parametre PowerShell 6.0'da kullanıma sunulmuştur.

Tür:Int32
Position:Named
Default value:None
Gerekli:True
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-CaseSensitive

Sıralamanın büyük/küçük harfe duyarlı olduğunu gösterir. Varsayılan olarak, sıralamalar büyük/küçük harfe duyarlı değildir.

Tür:SwitchParameter
Position:Named
Default value:Case-insensitive
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-Culture

Sıralamalar için kullanılacak kültürel yapılandırmayı belirtir. Sistemin kültür yapılandırmasını görüntülemek için Get-Culture kullanın.

Tür:String
Position:Named
Default value:None
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-Descending

Sort-Object nesneleri azalan düzende sıraladığını gösterir. Varsayılan değer artan düzendir.

Farklı sıralama düzenlerine sahip birden çok özelliği sıralamak için karma tablo kullanın. Örneğin, karma tabloyla bir özelliği artan düzende, diğer özelliği de azalan düzende sıralayabilirsiniz.

Tür:SwitchParameter
Position:Named
Default value:Ascending
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-InputObject

Nesneleri sıralamak için, bunları Sort-Objectişlem hattına gönderin. Bir öğe koleksiyonu göndermek için InputObject parametresini kullanırsanız, Sort-Object koleksiyonu temsil eden bir nesne alır. Bir nesne sıralanamadığından, Sort-Object koleksiyonun tamamını değiştirmeden döndürür.

Tür:PSObject
Position:Named
Default value:None
Gerekli:False
İşlem hattı girişini kabul et:True
Joker karakterleri kabul et:False

-Property

Sort-Object nesneleri sıralamak için kullandığı özellik adlarını belirtir. Joker karakterlere izin verilir. Nesneler özellik değerlerine göre sıralanır. Bir özellik belirtmezseniz, Sort-Object nesne türü veya nesnelerin kendileri için varsayılan özelliklere göre sıralar.

Birden çok özelliği ayırmak için virgül kullanın. Birden çok özellik artan düzende, azalan düzende veya sıralama düzenlerinin bir bileşiminde sıralanabilir. Birden çok özellik belirttiğinizde, nesneler ilk özelliğe göre sıralanır. Birden çok nesne ilk özellik için aynı değere sahipse, bu nesneler ikinci özelliğe göre sıralanır. Bu işlem, daha fazla belirtilen özellik veya nesne grubu kalmayıncaya kadar devam eder.

Özelliği parametresinin değeri hesaplanmış bir özellik olabilir. Hesaplanmış özellik oluşturmak için betik bloğu veya karma tablo kullanın.

Karma tablo için geçerli anahtarlar aşağıdaki gibidir:

  • Expression - <string> veya <script block>
  • Ascending veya Descending - <boolean>

Daha fazla bilgi için bkz. about_Calculated_Properties.

Tür:Object[]
Position:0
Default value:Default properties
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:True

-Stable

Sıralanmış nesneler, sıralama ölçütleri eşit olduğunda alındıkları sırayla teslim edilir.

Bu parametre PowerShell v6.2.0'a eklendi.

Tür:SwitchParameter
Position:Named
Default value:None
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-Top

Sıralanmış nesne dizisinin başlangıcından itibaren alınacak nesne sayısını belirtir. Bu, kararlı bir sıralamayla sonuçlanır.

Bu parametre PowerShell 6.0'da kullanıma sunulmuştur.

Tür:Int32
Position:Named
Default value:None
Gerekli:True
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

-Unique

Sort-Object yinelenenleri ortadan kaldırdığını ve yalnızca koleksiyonun benzersiz üyelerini döndürdüğünü gösterir. Benzersiz bir değerin ilk örneği sıralanmış çıktıya eklenir.

Benzersiz büyük/küçük harfe duyarlı değildir. Yalnızca karakter büyük/küçük harfe göre farklılık gösteren dizeler aynı kabul edilir. Örneğin, karakter ve KARAKTER.

Tür:SwitchParameter
Position:Named
Default value:All
Gerekli:False
İşlem hattı girişini kabul et:False
Joker karakterleri kabul et:False

Girişler

PSObject

Sıralanacak nesneleri bu cmdlet'e yöneltebilirsiniz.

Çıkışlar

PSObject

Bu cmdlet sıralanmış nesneleri döndürür.

Notlar

PowerShell, Sort-Objectiçin aşağıdaki diğer adları içerir:

  • Windows:
    • sort

Sort-Object cmdlet'i, komutta belirtilen özelliklere veya nesne türü için varsayılan sıralama özelliklerine göre nesneleri sıralar. Varsayılan sıralama özellikleri, PropertySet dosyasındaki DefaultKeyPropertySet adlı types.ps1xml kullanılarak tanımlanır. Daha fazla bilgi için bkz. about_Types.ps1xml.

Bir nesne belirtilen özelliklerden birine sahip değilse, bu nesnenin özellik değeri Sort-Object tarafından Null olarak yorumlanır ve sıralama düzeninin sonuna yerleştirilir.

Kullanılabilir sıralama özelliği olmadığında, PowerShell nesneleri karşılaştırmayı dener. Sort-Object her özellik için Compare yöntemini kullanır. Bir özellik IComparableuygulamazsa, cmdlet özellik değerini bir dizeye dönüştürür ve System.Stringiçin Compare yöntemini kullanır. Daha fazla bilgi için bkz. PSObject.CompareTo(Nesne) Yöntemi.

Statusgibi numaralandırılmış bir özelliğe göre sıralarsanız Sort-Object numaralandırma değerlerine göre sıralar. Windows hizmetleri için Durduruldu değeri 1 ve Çalışan değeri 4değerine sahiptir. Durduruldu, numaralandırılmış değerler nedeniyle Çalıştırılıyor önce sıralanır. Daha fazla bilgi için bkz. serviceControllerStatus .

Kararlı bir sıralama yapılırken sıralama algoritmasının performansı daha yavaştır.