オブジェクトの並べ替え

表示されたデータを整理して、 Sort-Object コマンドレットを使用してスキャンしやすくすることができます。 Sort-Object は、並べ替える 1 つ以上のプロパティの名前を受け取り、それらのプロパティの値で並べ替えられたデータを返します。

基本的な並べ替え

現在のディレクトリにサブディレクトリとファイルを一覧表示する問題を考慮してください。 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
...

Descending[switch] パラメーターを指定して、オブジェクトを逆の順序で並べ替えることもできます。

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

ハッシュ テーブルの使用

配列内のハッシュ テーブルを使用して、さまざまなプロパティを異なる順序で並べ替えることができます。 各ハッシュ テーブルでは 、式 キーを使用してプロパティ名を文字列として指定し、 昇順 または降順のキー 使用して、 $true または $falseで並べ替え順序を指定します。 キーは必須です。 昇順または降順のキーは省略可能です。

次の使用例は、 LastWriteTime の降順と 名前 の昇順でオブジェクトを並べ替えます。

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

スクリプトブロックを キーに設定することもできます。 Sort-Object コマンドレットを実行すると、scriptblock が実行され、結果が並べ替えに使用されます。

次の例では、 CreationTimeLastWriteTime の間の期間でオブジェクトを降順に並べ替えます。

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を使用してSort-Objectを参照できます。

sort LastWriteTime, Name

並べ替えのためのハッシュ テーブル内のキーは、次のように省略できます。

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

この例では、 eを表し、 d降順を表し、 a は昇順を表 します

読みやすさを向上させるために、ハッシュ テーブルを別の変数に配置できます。

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

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