Mengurutkan objek

Kita dapat mengatur data yang ditampilkan untuk mempermudah pemindaian Sort-Object menggunakan cmdlet. Sort-Object mengambil nama satu atau beberapa properti untuk diurutkan, dan mengembalikan data yang diurutkan berdasarkan nilai properti tersebut.

Pengurutan dasar

Pertimbangkan masalah mencantumkan subdirektori dan file di direktori saat ini. Jika kita ingin mengurutkan menurut LastWriteTime dan kemudian berdasarkan Nama, kita dapat melakukannya dengan mengetik:

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
...

Anda juga dapat mengurutkan objek dalam urutan terbalik dengan menentukan parameter sakelar Turun .

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

Menggunakan tabel hash

Anda dapat mengurutkan properti yang berbeda dalam urutan yang berbeda menggunakan tabel hash dalam array. Setiap tabel hash menggunakan kunci Ekspresi untuk menentukan nama properti sebagai string dan kunci Naik atau Menurun untuk menentukan urutan pengurutan menurut $true atau $false. Kunci Ekspresi bersifat wajib. Kunci Naik atau Turun bersifat opsional.

Contoh berikut mengurutkan objek dalam urutan LastWriteTime turun dan urutan Nama naik.

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
...

Anda juga dapat mengatur blokir skrip ke kunci Ekspresi . Saat menjalankan Sort-Object cmdlet, blok skrip dijalankan dan hasilnya digunakan untuk pengurutan.

Contoh berikut mengurutkan objek dalam urutan menurun menurut rentang waktu antara CreationTime dan LastWriteTime.

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
...

Tips

Anda dapat menghilangkan nama parameter Properti sebagai berikut:

Sort-Object LastWriteTime, Name

Selain itu, Anda dapat merujuk Sort-Object dengan alias bawaannya, sort:

sort LastWriteTime, Name

Kunci dalam tabel hash untuk pengurutan dapat disingkat sebagai berikut:

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

Dalam contoh ini, e adalah singkatan dari Ekspresi, d adalah singkatan dari Turun, dan singkatan dari Naik.

Untuk meningkatkan keterbacaan, Anda dapat menempatkan tabel hash ke dalam variabel terpisah:

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

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