Nesne sıralama

Görüntülenen verileri düzenleyerek cmdlet'i kullanarak taramayı Sort-Object kolaylaştırabiliriz. Sort-Object sıralamak için bir veya daha fazla özelliğin adını alır ve bu özelliklerin değerlerine göre sıralanmış verileri döndürür.

Temel sıralama

Geçerli dizindeki alt dizinleri ve dosyaları listeleme sorununu göz önünde bulundurun. LastWriteTime ve ardından Ada göre sıralamak istiyorsak, şunu yazarak bunu yapabiliriz:

Get-ChildItem |
    Sort-Object -Property LastWriteTime, Name |
    Format-Table -Property LastWriteTime, Name
LastWriteTime          Name
-------------          ----
11/6/2017 10:10:11 AM  .localization-config
11/6/2017 10:10:11 AM  .openpublishing.build.ps1
11/6/2017 10:10:11 AM  appveyor.yml
11/6/2017 10:10:11 AM  LICENSE
11/6/2017 10:10:11 AM  LICENSE-CODE
11/6/2017 10:10:11 AM  ThirdPartyNotices
11/6/2017 10:10:15 AM  tests
6/6/2018 7:58:59 PM    CONTRIBUTING.md
6/6/2018 7:58:59 PM    README.md
...

Azalan anahtar parametresini belirterek nesneleri ters sırada da sıralayabilirsiniz.

Get-ChildItem |
  Sort-Object -Property LastWriteTime, Name -Descending |
  Format-Table -Property LastWriteTime, Name
LastWriteTime          Name
-------------          ----
12/1/2018 10:13:50 PM  reference
12/1/2018 10:13:50 PM  dsc
...
6/6/2018 7:58:59 PM    README.md
6/6/2018 7:58:59 PM    CONTRIBUTING.md
11/6/2017 10:10:15 AM  tests
11/6/2017 10:10:11 AM  ThirdPartyNotices
11/6/2017 10:10:11 AM  LICENSE-CODE
11/6/2017 10:10:11 AM  LICENSE
11/6/2017 10:10:11 AM  appveyor.yml
11/6/2017 10:10:11 AM  .openpublishing.build.ps1
11/6/2017 10:10:11 AM  .localization-config

Karma tabloları kullanma

Dizideki karma tabloları kullanarak farklı düzenlerdeki farklı özellikleri sıralayabilirsiniz. Her karma tablo, özellik adını dize olarak belirtmek için bir İfade anahtarı ve veya $falseile sıralama düzenini $true belirtmek için Artan veya Azalan anahtar kullanır. İfade anahtarı zorunludur. Artan veya Azalan tuşu isteğe bağlıdır.

Aşağıdaki örnek nesneleri azalan LastWriteTime ve artan Ad düzeninde sıralar.

Get-ChildItem |
  Sort-Object -Property @{ Expression = 'LastWriteTime'; Descending = $true },
                        @{ Expression = 'Name'; Ascending = $true } |
  Format-Table -Property LastWriteTime, Name
LastWriteTime          Name
-------------          ----
12/1/2018 10:13:50 PM  dsc
12/1/2018 10:13:50 PM  reference
11/29/2018 6:56:01 PM  .openpublishing.redirection.json
11/29/2018 6:56:01 PM  gallery
11/24/2018 10:33:22 AM developer
11/20/2018 7:22:19 PM  .markdownlint.json
...

İfade anahtarına bir betik bloğu da ayarlayabilirsiniz. cmdlet'i çalıştırılırken Sort-Object betik bloğu yürütülür ve sonuç sıralama için kullanılır.

Aşağıdaki örnek nesneleri CreationTime ile LastWriteTime arasındaki zaman aralığına göre azalan düzende sıralar.

Get-ChildItem |
    Sort-Object -Property @{ Exp = { $_.LastWriteTime - $_.CreationTime }; Desc = $true } |
    Format-Table -Property LastWriteTime, CreationTime
LastWriteTime          CreationTime
-------------          ------------
12/1/2018 10:13:50 PM  11/6/2017 10:10:11 AM
12/1/2018 10:13:50 PM  11/6/2017 10:10:11 AM
11/7/2018 6:52:24 PM   11/6/2017 10:10:11 AM
11/7/2018 6:52:24 PM   11/6/2017 10:10:15 AM
11/3/2018 9:58:17 AM   11/6/2017 10:10:11 AM
10/26/2018 4:50:21 PM  11/6/2017 10:10:11 AM
11/17/2018 1:10:57 PM  11/29/2017 5:48:30 PM
11/12/2018 6:29:53 PM  12/7/2017 7:57:07 PM
...

İpuçları

Özellik parametresi adını aşağıdaki gibi atlayabilirsiniz:

Sort-Object LastWriteTime, Name

Ayrıca, yerleşik diğer adına sortbaşvurabilirsinizSort-Object:

sort LastWriteTime, Name

Sıralama için karma tablolardaki anahtarlar aşağıdaki gibi kısaltılabilir:

Sort-Object @{ e = 'LastWriteTime'; d = $true }, @{ e = 'Name'; a = $true }

Bu örnekte eifadesi İfade, difadesi Azalan, a ise Artan anlamına gelir.

Okunabilirliği geliştirmek için karma tabloları ayrı bir değişkene yerleştirebilirsiniz:

$order = @(
  @{ Expression = 'LastWriteTime'; Descending = $true }
  @{ Expression = 'Name'; Ascending = $true }
)

Get-ChildItem |
    Sort-Object $order |
    Format-Table LastWriteTime, Name