次の方法で共有


Sort-Object

プロパティ値別にオブジェクトを並べ替えます。

構文

Sort-Object
    [-Stable]
    [-Descending]
    [-Unique]
    [-InputObject <PSObject>]
    [[-Property] <Object[]>]
    [-Culture <String>]
    [-CaseSensitive]
    [<CommonParameters>]
Sort-Object
    [-Descending]
    [-Unique]
    -Top <Int32>
    [-InputObject <PSObject>]
    [[-Property] <Object[]>]
    [-Culture <String>]
    [-CaseSensitive]
    [<CommonParameters>]
Sort-Object
    [-Descending]
    [-Unique]
    -Bottom <Int32>
    [-InputObject <PSObject>]
    [[-Property] <Object[]>]
    [-Culture <String>]
    [-CaseSensitive]
    [<CommonParameters>]

説明

Sort-Object コマンドレットは、オブジェクトのプロパティ値に基づいてオブジェクトを昇順または降順で並べ替えます。 並べ替えプロパティがコマンドに含まれていない場合、PowerShell は最初の入力オブジェクトの既定の並べ替えプロパティを使用します。 入力オブジェクトの型に既定の並べ替えプロパティがない場合、PowerShell はオブジェクト自体の比較を試みます。 詳細については、「メモ」セクションを参照してください。

オブジェクトは、1 つのプロパティまたは複数のプロパティで並べ替えることができます。 複数のプロパティは、ハッシュ テーブルを使用して昇順、降順、または並べ替え順序の組み合わせで並べ替えます。 プロパティは、大文字と小文字を区別するか、大文字と小文字を区別せずに並べ替えられます。 出力から重複を削除するには、 Unique パラメーターを使用します。

例 1: 現在のディレクトリを名前で並べ替える

次の使用例は、ディレクトリ内のファイルとサブディレクトリを並べ替えます。

Get-ChildItem -Path C:\Test | Sort-Object

Directory: C:\Test

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        2/13/2019     08:55             26 anotherfile.txt
-a----        2/13/2019     13:26             20 Bfile.txt
-a----        2/12/2019     15:40         118014 Command.txt
-a----         2/1/2019     08:43            183 CreateTestFile.ps1
d-----        2/25/2019     18:25                Files
d-----        2/25/2019     18:24                Logs
-ar---        2/12/2019     14:31             27 ReadOnlyFile.txt
-a----        2/12/2019     16:24             23 Zsystemlog.log

Get-ChildItem コマンドレットは、Path パラメーターで指定されたディレクトリからC:\Testファイルとサブディレクトリを取得します。 オブジェクトは、パイプラインから Sort-Object コマンドレットに送信されます。 Sort-Object ではプロパティが指定されないため、出力は既定の並べ替えプロパティ Name で並べ替えられます。

例 2: 現在のディレクトリをファイル長で並べ替える

このコマンドは、現在のディレクトリ内のファイルを長さ順に昇順で表示します。

Get-ChildItem -Path C:\Test -File | Sort-Object -Property Length

Directory: C:\Test

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        2/13/2019     13:26             20 Bfile.txt
-a----        2/12/2019     16:24             23 Zsystemlog.log
-a----        2/13/2019     08:55             26 anotherfile.txt
-ar---        2/12/2019     14:31             27 ReadOnlyFile.txt
-a----         2/1/2019     08:43            183 CreateTestFile.ps1
-a----        2/12/2019     15:40         118014 Command.txt

Get-ChildItem コマンドレットは、Path パラメーターで指定されたディレクトリからファイルを取得します。 File パラメーターは、Get-ChildItemがファイル オブジェクトのみを取得することを指定します。 オブジェクトは、パイプラインから Sort-Object コマンドレットに送信されます。 Sort-Object では、 Length パラメーターを使用して、ファイルを昇順で長さで並べ替えます。

例 3: メモリ使用量でプロセスを並べ替える

次の使用例は、ワーキング セット (WS) サイズに基づいてメモリ使用量が最も多いプロセスを表示します。

Get-Process | Sort-Object -Property WS | Select-Object -Last 5

NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
    136   193.92     217.11     889.16   87492   8 OUTLOOK
    112   347.73     297.02      95.19  106908   8 Teams
    206   266.54     323.71      37.17   60620   8 MicrosoftEdgeCP
     35   552.19     549.94     131.66    6552   8 Code
      0     1.43     595.12       0.00    2780   0 Memory Compression

Get-Process コマンドレットは、コンピューターで実行されているプロセスの一覧を取得します。 プロセス オブジェクトは、パイプラインから Sort-Object コマンドレットに送信されます。 Sort-Object では、 Property パラメーターを使用して、オブジェクトを WS で並べ替えます。 オブジェクトは、パイプラインから Select-Object コマンドレットに送信されます。 Select-Object では、 Last パラメーターを使用して、最後の 5 つのオブジェクト ( WS 使用率が最も高いオブジェクト) を指定します。

PowerShell 6 では、Select-Objectの代わりに、Sort-Object パラメーター Bottom が使用されます。 たとえば、Get-Process | Sort-Object -Property WS -Bottom 5 のようにします。

例 4: HistoryInfo オブジェクトを ID で並べ替える

このコマンドは、Id プロパティを使用して、PowerShell セッションの HistoryInfo オブジェクトを並べ替えます。 各 PowerShell セッションには、独自のコマンド履歴があります。

Get-History | Sort-Object -Property Id -Descending

Id CommandLine
  -- -----------
  10 Get-Command Sort-Object -Syntax
   9 $PSVersionTable
   8 Get-Command Sort-Object -Syntax
   7 Get-Command Sort-Object -ShowCommandInfo
   6 Get-ChildItem -Path C:\Test | Sort-Object -Property Length
   5 Get-Help Clear-History -online
   4 Get-Help Clear-History -full
   3 Get-ChildItem | Get-Member
   2 Get-Command Sort-Object -Syntax
   1 Set-Location C:\Test\

Get-History コマンドレットは、現在の PowerShell セッションから履歴オブジェクトを取得します。 オブジェクトは、パイプラインから Sort-Object コマンドレットに送信されます。 Sort-Object では、 Property パラメーターを使用して、オブジェクトを Id で並べ替えます。 Descending パラメーターは、コマンド履歴を最新から最も古いものに並べ替えます。

例 5: ハッシュ テーブルを使用してプロパティを昇順および降順で並べ替える

この例では、2 つのプロパティを使用してオブジェクト StatusDisplayNameを並べ替えます。 Status は降順に並べ替え、 DisplayName は昇順で並べ替えられます。

ハッシュ テーブルは、 Property パラメーターの値を指定するために使用されます。 ハッシュ テーブルでは、式を使用してプロパティ名と並べ替え順序を指定します。 ハッシュ テーブルの詳細については、「about_Hash_Tables (ハッシュ テーブルについて)」をご覧ください。

ハッシュ テーブルで使用される Status プロパティは列挙プロパティです。 詳細については、「 ServiceControllerStatus」を参照してください。

Get-Service |
    Sort-Object -Property @{Expression = "Status"; Descending = $true},
                          @{Expression = "DisplayName"; Descending = $false}

Status   Name               DisplayName
------   ----               -----------
Running  Appinfo            Application Information
Running  BthAvctpSvc        AVCTP service
Running  BrokerInfrastru... Background Tasks Infrastructure Ser...
Running  BDESVC             BitLocker Drive Encryption Service
Running  CoreMessagingRe... CoreMessaging
Running  VaultSvc           Credential Manager
Running  DsSvc              Data Sharing Service
Running  Dhcp               DHCP Client
...
Stopped  ALG                Application Layer Gateway Service
Stopped  AppMgmt            Application Management
Stopped  BITS               Background Intelligent Transfer Ser...
Stopped  wbengine           Block Level Backup Engine Service
Stopped  BluetoothUserSe... Bluetooth User Support Service_14fb...
Stopped  COMSysApp          COM+ System Application
Stopped  smstsmgr           ConfigMgr Task Sequence Agent
Stopped  DeviceInstall      Device Install Service
Stopped  MSDTC              Distributed Transaction Coordinator

Get-Service コマンドレットは、コンピューター上のサービスの一覧を取得します。 サービス オブジェクトは、パイプラインから Sort-Object コマンドレットに送信されます。 Sort-Object では、ハッシュ テーブルと共に Property パラメーターを使用して、プロパティ名と並べ替え順序を指定します。 Property パラメーターは、降順でStatusDisplayNameの 2 つのプロパティで並べ替えられます。

Status は列挙プロパティです。 Stopped の値は 1 で、 Running の値は 4 です。 Descending パラメーターは$Trueに設定され、Running プロセスが Stopped プロセスの前に表示されます。 DisplayName Descending パラメーターを $False に設定して、表示名をアルファベット順に並べ替えます。

例 6: 期間でテキスト ファイルを並べ替える

このコマンドは、テキスト ファイルを、 CreationTimeLastWriteTime の間の期間で降順に並べ替えます。

Get-ChildItem -Path C:\Test\*.txt |
    Sort-Object -Property {$_.CreationTime - $_.LastWriteTime} |
    Format-Table CreationTime, LastWriteTime, FullName

CreationTime          LastWriteTime        FullName
------------          -------------        --------
11/21/2018 12:39:01   2/26/2019 08:59:36   C:\Test\test2.txt
12/4/2018 08:29:41    2/26/2019 08:57:05   C:\Test\powershell_list.txt
2/20/2019 08:15:59    2/26/2019 12:09:43   C:\Test\CreateTestFile.txt
2/20/2019 08:15:59    2/26/2019 12:07:41   C:\Test\Command.txt
2/20/2019 08:15:59    2/26/2019 08:57:52   C:\Test\ReadOnlyFile.txt
11/29/2018 15:16:50   12/4/2018 16:16:24   C:\Test\LogData.txt
2/25/2019 18:25:11    2/26/2019 12:08:47   C:\Test\Zsystemlog.txt
2/25/2019 18:25:11    2/26/2019 08:55:33   C:\Test\Bfile.txt
2/26/2019 08:46:59    2/26/2019 12:12:19   C:\Test\LogFile3.txt

Get-ChildItem コマンドレットでは、Path パラメーターを使用して、ディレクトリ C:\Testとすべての*.txt ファイルを指定します。 オブジェクトは、パイプラインから Sort-Object コマンドレットに送信されます。 Sort-Object では、スクリプト ブロックと共に Property パラメーターを使用して、 CreationTimeLastWriteTime の間の各ファイルの期間を決定します。

例 7: テキスト ファイル内の名前を並べ替える

この例では、テキスト ファイルからリストを並べ替える方法を示します。 元のファイルは、並べ替えられていないリストとして表示されます。 Sort-Object は、内容を並べ替え、重複を削除する Unique パラメーターを使用して内容を並べ替えます。

# All items unsorted
Get-Content -Path C:\Test\ServerNames.txt

localhost
server01
server25
LOCALHOST
Server19
server3
localhost

# All items sorted
Get-Content -Path C:\Test\ServerNames.txt | Sort-Object
localhost
LOCALHOST
localhost
server01
Server19
server25
server3

# Unique filtered items sorted
Get-Content -Path C:\Test\ServerNames.txt | Sort-Object -Unique

localhost
server01
Server19
server25
server3

Get-Content コマンドレットでは、Path パラメーターを使用してディレクトリとファイル名を指定します。 ファイル ServerNames.txt には、並べ替えられていないコンピューター名の一覧が含まれています。

Get-Content コマンドレットでは、Path パラメーターを使用してディレクトリとファイル名を指定します。 ファイル ServerNames.txt には、並べ替えられていないコンピューター名の一覧が含まれています。 オブジェクトは、パイプラインから Sort-Object コマンドレットに送信されます。 Sort-Object は、リストを既定の順序 (昇順) で並べ替えます。

Get-Content コマンドレットでは、Path パラメーターを使用してディレクトリとファイル名を指定します。 ファイル ServerNames.txt には、並べ替えられていないコンピューター名の一覧が含まれています。 オブジェクトは、パイプラインから Sort-Object コマンドレットに送信されます。 Sort-Object では、 Unique パラメーターを使用して、重複するコンピューター名を削除します。 リストは、既定の昇順で並べ替えられます。

例 8: 文字列を整数として並べ替える

この例では、文字列オブジェクトを含むテキスト ファイルを整数として並べ替える方法を示します。 各コマンドをパイプラインに送信して Get-Member し、オブジェクトが整数ではなく文字列であることを確認できます。 これらの例では、 ProductId.txt ファイルには、製品番号の並べ替えのないリストが含まれています。

最初の例では、 Get-Content はファイルの内容を取得し、 Sort-Object コマンドレットにパイプします。 Sort-Object は、文字列オブジェクトを昇順で並べ替えます。

# String sorted
Get-Content -Path C:\Test\ProductId.txt | Sort-Object

0
1
12345
1500
2
2800
3500
4100
500
6200
77
88
99999

# Integer sorted
Get-Content -Path C:\Test\ProductId.txt | Sort-Object {[int]$_}

0
1
2
77
88
500
1500
2800
3500
4100
6200
12345
99999

2 番目の例では、 Get-Content はファイルの内容を取得し、パイプ行を Sort-Object コマンドレットに取得します。 Sort-Object では、スクリプト ブロックを使用して文字列を整数に変換します。 サンプル コードでは、 [int] 文字列を整数に変換し、 $_ はパイプラインの下にある各文字列を表します。 整数オブジェクトは、パイプラインから Sort-Object コマンドレットに送信されます。 Sort-Object は、整数オブジェクトを数値順に並べ替えます。

例 9: 安定した並べ替えを使用する

TopBottom、または Stable パラメーターを使用すると、並べ替えられたオブジェクトは、並べ替え条件が等しいときにSort-Objectによって受信された順序で配信されます。 この例では、数値 1 から 20 を値 'modulo 3' で並べ替えています。 剰余値の範囲は 0 から 2 です。

1..20 |Sort-Object {$_ % 3}

18
3
15
6
12
9
1
16
13
10
7
4
19
11
8
14
5
17
2
20

1..20 |Sort-Object {$_ % 3} -Stable

3
6
9
12
15
18
1
4
7
10
13
16
19
2
5
8
11
14
17
20

最初の並べ替えからの出力は、剰余値で正しくグループ化されますが、個々の項目は剰余範囲内で並べ替えられません。 2 番目の並べ替えでは、 Stable オプションを使用して、安定した並べ替えを返します。

例 10: 複数のプロパティで並べ替える

複数のプロパティで並べ替える場合は、プロパティをコンマで区切ります。

Get-ChildItem -Path C:\Test | Sort-Object Length,Name

Directory: C:\Test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          13/10/2021    22:16              2 File01.txt
-a---          13/10/2021    22:16              2 File03.txt
-a---          13/10/2021    22:18             64 File02.txt
-a---          13/10/2021    22:18             64 File04.txt

Get-ChildItem コマンドレットは、Path パラメーターで指定されたディレクトリからファイルを取得します。 オブジェクトは、パイプラインから Sort-Object コマンドレットに送信されます。 Sort-Object では、 Length および Name パラメーターを使用して、ファイルを昇順で長さで並べ替えます。 File01.txtFile03.txtの長さが同じであるため、プロパティ Name でさらに並べ替えられます。

例 11: キー値でハッシュテーブルを並べ替える

PowerShell 6 以降、 Sort-Object ではキー値による ハッシュテーブル 入力の並べ替えがサポートされています。 次の例では、ハッシュテーブルの配列を各ハッシュテーブルの weight キーの値で並べ替えます。

@(
    @{ name = 'a' ; weight = 7 }
    @{ name = 'b' ; weight = 1 }
    @{ name = 'c' ; weight = 3 }
    @{ name = 'd' ; weight = 7 }
) | Sort-Object -Property weight -OutVariable Sorted

$Sorted | ForEach-Object -Process { "{0}: {1}" -f $_.name, $_.weight }

Name                           Value
----                           -----
Weight                         1
Name                           b
Weight                         3
Name                           c
Weight                         7
Name                           a
Weight                         7
Name                           d

b: 1
c: 3
a: 7
d: 7

パラメーター

-Bottom

並べ替えられたオブジェクト配列の末尾から取得するオブジェクトの数を指定します。 これにより、安定した並べ替えが行われます。

このパラメーターは、PowerShell 6.0 で導入されました。

型:Int32
配置:Named
規定値:None
必須:True
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-CaseSensitive

並べ替えが大文字と小文字を区別することを示します。 既定では、並べ替えでは大文字と小文字は区別されません。

型:SwitchParameter
配置:Named
規定値:Case-insensitive
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Culture

並べ替えに使用するカルチャ構成を指定します。 Get-Cultureを使用して、システムのカルチャ構成を表示します。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Descending

Sort-Objectがオブジェクトを降順に並べ替える方法を示します。 既定値は昇順です。

異なる並べ替え順序で複数のプロパティを並べ替えるには、ハッシュ テーブルを使用します。 たとえば、ハッシュ テーブルを使用すると、1 つのプロパティを昇順で並べ替え、別のプロパティを降順で並べ替えることができます。

型:SwitchParameter
配置:Named
規定値:Ascending
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-InputObject

オブジェクトを並べ替えるには、パイプラインを Sort-Objectに送信します。 InputObject パラメーターを使用して項目のコレクションを送信する場合、Sort-Objectはコレクションを表す 1 つのオブジェクトを受け取ります。 1 つのオブジェクトを並べ替えることができないため、 Sort-Object はコレクション全体を変更せずに返します。

型:PSObject
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-Property

オブジェクトの並べ替えに使用 Sort-Object プロパティ名を指定します。 ワイルドカードを使用できます。 オブジェクトは、プロパティ値に基づいて並べ替えられます。 プロパティを指定しない場合、 Sort-Object は、オブジェクトの種類またはオブジェクト自体の既定のプロパティに基づいて並べ替えられます。

複数のプロパティを区切るには、コンマを使用します。 複数のプロパティは、昇順、降順、または並べ替え順序の組み合わせで並べ替えることができます。 複数のプロパティを指定すると、オブジェクトは最初のプロパティで並べ替えられます。 複数のオブジェクトが最初のプロパティに同じ値を持つ場合、それらのオブジェクトは 2 番目のプロパティで並べ替えられます。 指定されたプロパティがなくなるか、またはオブジェクトのグループがなくなるまで、このプロセスが続行されます。

Property パラメーターの値には、計算プロパティを指定できます。 計算プロパティを作成するには、scriptblock またはハッシュテーブルを使用します。

ハッシュ テーブルの有効なキーは次のとおりです。

  • expression - <string> または <script block>
  • ascending または descending - <boolean>

詳細については、「 about_Calculated_Properties」を参照してください。

型:Object[]
配置:0
規定値:Default properties
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:True

-Stable

並べ替えられたオブジェクトは、並べ替え条件が等しいときに受信した順序で配信されます。

このパラメーターは、PowerShell v6.2.0 で追加されました。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Top

並べ替えられたオブジェクト配列の先頭から取得するオブジェクトの数を指定します。 これにより、安定した並べ替えが行われます。

このパラメーターは、PowerShell 6.0 で導入されました。

型:Int32
配置:Named
規定値:None
必須:True
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Unique

Sort-Objectが重複を排除し、コレクションの一意のメンバーのみを返すように指定します。 並べ替えられた出力には、一意の値の最初のインスタンスが含まれます。

一意 では大文字と小文字が区別されません。 文字ケースによってのみ異なる文字列は同じと見なされます。 たとえば、文字や CHARACTER などです。

型:SwitchParameter
配置:Named
規定値:All
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

PSObject

このコマンドレットに並べ替えるオブジェクトをパイプ処理できます。

出力

PSObject

このコマンドレットは、並べ替えられたオブジェクトを返します。

メモ

PowerShell には、 Sort-Objectの次のエイリアスが含まれています。

  • Windows:
    • sort

Sort-Object コマンドレットは、コマンドで指定されたプロパティまたはオブジェクト型の既定の並べ替えプロパティに基づいてオブジェクトを並べ替えます。 既定の並べ替えプロパティは、types.ps1xml ファイル内の DefaultKeyPropertySet という名前のPropertySetを使用して定義されます。 詳細については、 about_Types.ps1xml を参照してください。

オブジェクトに指定されたプロパティがない場合、そのオブジェクトのプロパティ値は Sort-Object によって Null として解釈され、並べ替え順序の末尾に配置されます。

並べ替えプロパティが使用できない場合、PowerShell はオブジェクト自体の比較を試みます。 Sort-Object では、プロパティごとに Compare メソッドを使用します。 プロパティが IComparable を実装していない場合、コマンドレットはプロパティ値を文字列に変換し、System.StringCompare メソッドを使用します。 詳細については、「 PSObject.CompareTo(Object) メソッドを参照してください。

Status などの列挙プロパティで並べ替える場合は、列挙値で並べ替Sort-Object。 Windows サービスの場合、 Stopped の値は 1 で、 Running の値は 4 です。 停止 は、列挙値のため、 Running の前に並べ替えられます。 詳細については、「 ServiceControllerStatus」を参照してください。

並べ替えアルゴリズムのパフォーマンスは、安定した並べ替えを実行すると遅くなります。