Nesne Sıralama

Cmdlet 'ini kullanarak taramayı kolaylaştırmak için, görüntülenecek verileri düzenleyebiliriz Sort-Object . Sort-Object sıralanacak bir veya daha fazla özellik 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 istiyoruz, şunu yazarak 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
...

Ayrıca, azalan anahtar parametresini belirterek nesneleri ters sırada 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

Bir dizideki karma tabloları kullanarak farklı siparişlerdeki farklı özellikleri sıralayabilirsiniz. Her karma tablo, veya ile sıralama düzenini belirtmek için bir ifade anahtarını dize ve artan veya azalan bir anahtarla belirtmek için kullanır $true $false . İfade anahtarı zorunludur. Artan veya azalan anahtar isteğe bağlıdır.

Aşağıdaki örnek, nesneleri azalan LastWriteTime sırasına ve artan ad sırasına göre 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
...

Ayrıca, ifade anahtarına bir ScriptBlock ayarlayabilirsiniz. Sort-ObjectCmdlet 'i çalıştırırken ScriptBlock yürütülür ve sonuç sıralama için kullanılır.

Aşağıdaki örnek, nesneleri, CreationTime ve LastWriteTime arasındaki zaman aralığına göre azalan sırada sıralar.

Get-ChildItem |
  Sort-Object -Property @{ Expression = { $_.LastWriteTime - $_.CreationTime }; Descending = $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 parametre adını aşağıdaki şekilde atlayabilirsiniz:

Sort-Object LastWriteTime, Name

Bunun yanı sıra, Sort-Object yerleşik diğer adıyla öğesine başvurabilirsiniz sort :

sort LastWriteTime, Name

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

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

Bu örnekte, e ifadesi, d ise azalan ve a 'nın artan bir anlamına gelir.

Okunabilirliğini 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