排序物件

我們可以組織顯示的數據,以便更輕鬆地使用 Sort-Object Cmdlet 進行掃描。 Sort-Object 會採用一或多個屬性的名稱來排序,並傳回依這些屬性的值排序的數據。

基本排序

請考慮列出目前目錄中的子目錄和檔案的問題。 如果我們想要依 LastWriteTime 排序,然後 依 [名稱] 排序,我們可以輸入下列命令來執行:

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

您也可以藉由指定 遞減 參數,以反向順序排序物件。

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

使用雜湊表

您可以使用陣列中的哈希表,以不同的順序排序不同的屬性。 每個哈希表都會使用 Expression 索引鍵,將屬性名稱指定為字串,並使用遞增減索引鍵來指定 或 $false的排序順序$true表達式索引鍵是必要的。 遞增遞減索引鍵是選擇性的。

下列範例會以遞減 LastWriteTime 順序和遞增 的 Name 順序排序物件。

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

您也可以將 scriptblock 設定為 Expression 索引鍵。 執行 Sort-Object Cmdlet 時,會執行 scriptblock,並將結果用於排序。

下列範例會依 CreationTime 與 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
...

提示

您可以省略 Property 參數名稱,如下所示:

Sort-Object LastWriteTime, Name

此外,您也可以透過其內建別名來Sort-Object參考 : sort

sort LastWriteTime, Name

哈希表中用於排序的索引鍵可以縮寫如下:

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

在此範例中 ,e 代表 Expressiond 代表 Descending,而 a 代表 Ascending

若要改善可讀性,您可以將哈希表放入個別變數:

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

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