Nesneleri sıralama
Sort-Object cmdlet'ini kullanarak taramayı kolaylaştırmak için görüntülenen verileri düzenleyebiliriz. Sort-Object, sıralama yapılacak 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 düşünün. LastWriteTime'a ve ardından Ad'a göre sıralama yapmak istiyorsak bunu ş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
Hash tablolarını kullanma
Bir dizideki karma tabloları kullanarak farklı özellikleri farklı sıralarda sıralayabilirsiniz. Her karma tablosu, özellik adını dize olarak belirtmek için bir İfade anahtarı ve 'e göre sıralama düzenini belirtmek için bir Artan veya Azalan anahtarı kullanır. $true veya $false. İfade anahtarı zorunludur. Artan veya Azalan tuşu isteğe bağlıdır.
Aşağıdaki örnek, nesneleri azalan LastWriteTime düzeninde 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
...
Ayrıca İfade anahtarına bir komut dosyası bloğu da ayarlayabilirsiniz. Sort-Object cmdlet'i çalıştırıldığında, komut dosyası 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 parametre adını aşağıdaki şekilde çıkartabilirsiniz:
Sort-Object LastWriteTime, Name
Ayrıca, Sort-Object'e yerleşik takma adı olan sort ile başvurabilirsiniz:
sort LastWriteTime, Name
Hash tablolarındaki sıralamaya yönelik anahtarlar aşağıdaki gibi kısaltılabilir:
Sort-Object @{ e = 'LastWriteTime'; d = $true }, @{ e = 'Name'; a = $true }
Bu örnekte, e İfade'yi, d Azalan'ı ve a'yı ifade eder. Artan anlamına gelir.
Okunabilirliği artırmak için karma tablolarını 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