다음을 통해 공유


개체 정렬

Sort-Object cmdlet을 사용하여 표시된 데이터를 검색하기 쉽게 구성할 수 있습니다. Sort-Object 는 정렬할 하나 이상의 속성 이름을 사용하고 해당 속성의 값을 기준으로 정렬된 데이터를 반환합니다.

기본 정렬

현재 디렉터리에 하위 디렉터리 및 파일을 나열하는 문제를 고려합니다. 정렬 기준으로 LastWriteTimeName을 차례로 사용하여 정렬하려면 다음과 같이 입력하면 됩니다.

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

해시 테이블 사용

배열에서 해시 테이블을 사용하여 여러 가지 속성을 다양한 순서로 정렬할 수 있습니다. 각 해시 테이블은 식 키를 사용하여 속성 이름을 문자열로 지정하고 오름차순 또는 내림차순 키를 사용하여 정렬 순서 $true 를 지정합니다$false. 키는 필수입니다. 오름차순 또는 내림차순 키는 선택 사항입니다.

다음 예제에서는 내림차순 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 키로 설정할 수도 있습니다. cmdlet을 Sort-Object 실행할 때 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
...

다음과 같이 속성 매개 변수 이름을 생략할 수 있습니다.

Sort-Object LastWriteTime, Name

또한 기본 제공 별칭 sort를 통해 Sort-Object를 참조할 수 있습니다.

sort LastWriteTime, Name

정렬을 위한 해시 테이블의 키는 다음과 같이 축약될 수 있습니다.

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

이 예제에서 e는 Expression을 의미하고, d는 내림차순을 의미하고, 오름차순을 의미합니다.

가독성을 개선하기 위해 해시 테이블을 개별 변수에 넣을 수 있습니다.

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

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