개체 정렬
Sort-Object
cmdlet을 사용하여 표시된 데이터를 검색하기 쉽게 구성할 수 있습니다.
Sort-Object
는 정렬할 하나 이상의 속성 이름을 사용하고 해당 속성의 값을 기준으로 정렬된 데이터를 반환합니다.
기본 정렬
현재 디렉터리에 하위 디렉터리 및 파일을 나열하는 문제를 고려합니다. 정렬 기준으로 LastWriteTime과 Name을 차례로 사용하여 정렬하려면 다음과 같이 입력하면 됩니다.
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
PowerShell