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>]
Description
cmdlet은 Sort-Object
개체 속성 값을 기준으로 개체를 오름차순 또는 내림차순으로 정렬합니다. 정렬 속성이 명령에 포함되지 않은 경우 PowerShell은 첫 번째 입력 개체의 기본 정렬 속성을 사용합니다. 입력 개체의 형식에 기본 정렬 속성이 없는 경우 PowerShell은 개체 자체를 비교하려고 시도합니다. 자세한 내용은 참고 섹션을 참조하세요.
단일 속성 또는 여러 속성을 기준으로 개체를 정렬할 수 있습니다. 여러 속성은 해시 테이블을 사용하여 오름차순, 내림차순 또는 정렬 순서의 조합으로 정렬합니다. 속성은 대/소문자를 구분하거나 대/소문자를 구분하지 않는 것으로 정렬됩니다. 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
cmdlet은 Get-ChildItem
Path 매개 변수C:\Test
로 지정된 디렉터리에서 파일 및 하위 디렉터리를 가져옵니다. 개체는 파이프라인 아래로 cmdlet으로 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
cmdlet은 Get-ChildItem
Path 매개 변수로 지정된 디렉터리에서 파일을 가져옵니다.
File 매개 변수는 파일 개체만 가져오게 Get-ChildItem
지정합니다. 개체는 파이프라인 아래로 cmdlet으로 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
cmdlet은 Get-Process
컴퓨터에서 실행 중인 프로세스 목록을 가져옵니다. 프로세스 개체는 파이프라인을 cmdlet으로 Sort-Object
보냅니다. Sort-Object
는 속성 매개 변수를 사용하여 WS별로 개체를 정렬합니다. 개체는 파이프라인 아래로 cmdlet으로 Select-Object
전송됩니다.
Select-Object
는 Last 매개 변수를 사용하여 WS 사용량이 가장 높은 개체인 마지막 5개 개체를 지정합니다.
PowerShell 6 Sort-Object
에서 Bottom 매개 변수는 .에 대한 대안Select-Object
입니다. 예들 들어 Get-Process | Sort-Object -Property WS -Bottom 5
입니다.
예제 4: Id별 HistoryInfo 개체 정렬
이 명령은 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\
cmdlet은 Get-History
현재 PowerShell 세션에서 기록 개체를 가져옵니다. 개체는 파이프라인 아래로 cmdlet으로 Sort-Object
전송됩니다. Sort-Object
는 속성 매개 변수를 사용하여 ID별로 개체를 정렬합니다. 내림차순 매개 변수는 명령 기록을 최신에서 가장 오래된 값으로 정렬합니다.
예제 5: 해시 테이블을 사용하여 속성을 오름차순 및 내림차순으로 정렬
이 예제에서는 두 가지 속성을 사용하여 상태 및 DisplayName 개체를 정렬합니다. 상태는 내림차순으로 정렬되고 DisplayName 은 오름차순으로 정렬됩니다.
해시 테이블은 속성 매개 변수의 값을 지정하는 데 사용됩니다. 해시 테이블은 식을 사용하여 속성 이름과 정렬 순서를 지정합니다. 해시 테이블에 대한 자세한 내용은 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
cmdlet은 Get-Service
컴퓨터의 서비스 목록을 가져옵니다. 서비스 개체는 파이프라인을 cmdlet으로 Sort-Object
보냅니다. Sort-Object
는 해시 테이블과 함께 Property 매개 변수를 사용하여 속성 이름과 정렬 순서를 지정합니다. 속성 매개 변수는 내림차순 상태와 DisplayName을 오름차순으로 정렬하는 두 가지 속성으로 정렬됩니다.
상태는 열거된 속성입니다. 중지된 값은 1이고 실행 값은 4입니다. 내림차순 매개 변수는 실행 중인 프로세스가 중지된 프로세스 전에 표시되도록 설정 $True
됩니다. DisplayName은 표시 이름을 사전순으로 정렬하도록 $False
내림차순 매개 변수를 설정합니다.
예제 6: 시간 범위별로 텍스트 파일 정렬
이 명령은 CreationTime과 LastWriteTime 사이의 시간 범위별로 텍스트 파일을 내림차순으로 정렬합니다.
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
cmdlet은 Get-ChildItem
Path 매개 변수를 사용하여 디렉터리와 C:\Test
모든 파일을 지정합니다*.txt
. 개체는 파이프라인 아래로 cmdlet으로 Sort-Object
전송됩니다.
Sort-Object
는 Scriptblock과 함께 Property 매개 변수를 사용하여 CreationTime과 LastWriteTime 사이의 각 파일 시간 범위를 확인합니다.
예제 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
cmdlet은 Get-Content
Path 매개 변수를 사용하여 디렉터리 및 파일 이름을 지정합니다. 파일에 ServerNames.txt
는 정렬되지 않은 컴퓨터 이름 목록이 포함되어 있습니다.
cmdlet은 Get-Content
Path 매개 변수를 사용하여 디렉터리 및 파일 이름을 지정합니다. 파일에 ServerNames.txt
는 정렬되지 않은 컴퓨터 이름 목록이 포함되어 있습니다. 개체는 파이프라인 아래로 cmdlet으로 Sort-Object
전송됩니다. Sort-Object
는 목록을 기본 순서로 오름차순으로 정렬합니다.
cmdlet은 Get-Content
Path 매개 변수를 사용하여 디렉터리 및 파일 이름을 지정합니다. 파일에 ServerNames.txt
는 정렬되지 않은 컴퓨터 이름 목록이 포함되어 있습니다. 개체는 파이프라인 아래로 cmdlet으로 Sort-Object
전송됩니다. Sort-Object
는 Unique 매개 변수를 사용하여 중복된 컴퓨터 이름을 제거합니다. 목록은 기본 순서로 오름차순으로 정렬됩니다.
예제 8: 문자열을 정수로 정렬
이 예제에서는 문자열 개체가 포함된 텍스트 파일을 정수로 정렬하는 방법을 보여 줍니다. 파이프라인 Get-Member
아래로 각 명령을 보내고 개체가 정수가 아닌 문자열인지 확인할 수 있습니다. 이러한 예제의 ProductId.txt
경우 파일에는 정렬되지 않은 제품 번호 목록이 포함되어 있습니다.
첫 번째 예제 Get-Content
에서는 파일의 내용을 가져오고 cmdlet에 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
두 번째 예제 Get-Content
에서는 파일의 내용을 가져오고 cmdlet에 Sort-Object
줄을 파이프합니다. Sort-Object
는 스크립트 블록을 사용하여 문자열을 정수로 변환합니다. 샘플 코드 [int]
에서 문자열을 정수로 변환하고 $_
파이프라인에서 나올 때 각 문자열을 나타냅니다. 정수 개체는 파이프라인을 cmdlet으로 Sort-Object
보냅니다.
Sort-Object
는 정수 개체를 숫자 순서로 정렬합니다.
예제 9: 안정적인 정렬 사용
Top, Bottom 또는 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
첫 번째 정렬의 출력은 모듈러스 값으로 올바르게 그룹화되지만 개별 항목은 모듈러스 범위 내에서 정렬되지 않습니다. 두 번째 정렬은 안정 옵션을 사용하여 안정적인 정렬을 반환합니다.
예제 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
cmdlet은 Get-ChildItem
Path 매개 변수로 지정된 디렉터리에서 파일을 가져옵니다.
개체는 파이프라인 아래로 cmdlet으로 Sort-Object
전송됩니다. Sort-Object
는 Length 및 Name 매개 변수를 사용하여 파일을 길이별로 오름차순으로 정렬합니다. 이후 File01.txt
동일한 File03.txt
길이를 가지므로 속성 이름을 기준으로 더 정렬됩니다.
예제 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 |
Position: | Named |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-CaseSensitive
정렬이 대/소문자를 구분한다는 것을 나타냅니다. 기본적으로 정렬은 대/소문자를 구분하지 않습니다.
형식: | SwitchParameter |
Position: | Named |
Default value: | Case-insensitive |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Culture
정렬에 사용할 culture 구성을 지정합니다. 시스템의 문화권 구성을 표시하는 데 사용합니다 Get-Culture
.
형식: | String |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Descending
개체를 내림차순으로 정렬한다는 것을 Sort-Object
나타냅니다. 기본값은 오름차순입니다.
여러 정렬 순서를 사용하여 여러 속성을 정렬하려면 해시 테이블을 사용합니다. 예를 들어 해시 테이블을 사용하면 한 속성을 오름차순으로 정렬하고 다른 속성을 내림차순으로 정렬할 수 있습니다.
형식: | SwitchParameter |
Position: | Named |
Default value: | Ascending |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-InputObject
개체를 정렬하려면 파이프라인 Sort-Object
아래로 보냅니다. InputObject 매개 변수를 사용하여 항목 Sort-Object
컬렉션을 제출하는 경우 컬렉션을 나타내는 하나의 개체를 받습니다. 하나의 개체를 정렬 Sort-Object
할 수 없으므로 전체 컬렉션을 변경하지 않고 반환합니다.
형식: | PSObject |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | True |
와일드카드 문자 허용: | False |
-Property
개체를 정렬하는 Sort-Object
데 사용하는 속성 이름을 지정합니다. 와일드카드가 허용됩니다.
개체는 속성 값에 따라 정렬됩니다. 속성을 Sort-Object
지정하지 않으면 개체 형식 또는 개체 자체에 대한 기본 속성을 기준으로 정렬합니다.
쉼표로 여러 속성을 구분합니다. 여러 속성을 오름차순, 내림차순 또는 정렬 순서의 조합으로 정렬할 수 있습니다. 여러 속성을 지정하면 개체가 첫 번째 속성별로 정렬됩니다. 여러 개체가 첫 번째 속성에 대해 동일한 값을 갖는 경우 해당 개체는 두 번째 속성을 기준으로 정렬됩니다. 지정된 속성이나 개체 그룹이 더 이상 없을 때까지 이 프로세스가 계속됩니다.
속성 매개 변수의 값은 계산된 속성일 수 있습니다. 계산된 속성을 만들려면 scriptblock 또는 해시 테이블을 사용합니다.
해시 테이블의 유효한 키는 다음과 같습니다.
expression
-<string>
또는<script block>
ascending
또는descending
-<boolean>
자세한 내용은 about_Calculated_Properties 참조하세요.
형식: | Object[] |
Position: | 0 |
Default value: | Default properties |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | True |
-Stable
정렬된 개체는 정렬 조건이 같을 때 받은 순서대로 전달됩니다.
이 매개 변수는 PowerShell v6.2.0에 추가되었습니다.
형식: | SwitchParameter |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Top
정렬된 개체 배열의 시작부터 가져올 개체 수를 지정합니다. 이렇게 하면 안정적인 정렬이 수행됩니다.
이 매개 변수는 PowerShell 6.0에서 도입되었습니다.
형식: | Int32 |
Position: | Named |
Default value: | None |
필수: | True |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Unique
중복 항목을 제거하고 컬렉션의 고유 멤버만 반환한다는 것을 Sort-Object
나타냅니다. 고유 값의 첫 번째 인스턴스는 정렬된 출력에 포함됩니다.
고유 는 대/소문자를 구분하지 않습니다. 문자 대/소문자만 다른 문자열은 동일한 것으로 간주됩니다. 예를 들어 문자 및 CHARACTER입니다.
형식: | SwitchParameter |
Position: | Named |
Default value: | All |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
입력
정렬할 개체를 이 cmdlet으로 파이프할 수 있습니다.
출력
이 cmdlet은 정렬된 개체를 반환합니다.
참고
PowerShell에는 다음 별칭이 포함됩니다.Sort-Object
- Windows:
sort
cmdlet은 Sort-Object
명령에 지정된 속성 또는 개체 형식에 대한 기본 정렬 속성을 기반으로 개체를 정렬합니다. 기본 정렬 속성은 파일에서 명명된 속성을 PropertySet
DefaultKeyPropertySet
types.ps1xml
사용하여 정의됩니다. 자세한 내용은 about_Types.ps1xml을 참조하세요.
개체에 지정된 속성 중 하나가 없는 경우 해당 개체의 속성 값은 Null로 해석되고 Sort-Object
정렬 순서의 끝에 배치됩니다.
정렬 속성을 사용할 수 없는 경우 PowerShell은 개체 자체를 비교하려고 시도합니다.
Sort-Object
는 각 속성에 대해 Compare 메서드를 사용합니다. 속성이 IComparable을 구현하지 않는 경우 cmdlet은 속성 값을 문자열로 변환하고 System.String에 대해 Compare 메서드를 사용합니다. 자세한 내용은 PSObject.CompareTo(Object) 메서드를 참조 하세요.
StatusSort-Object
와 같은 열거형 속성을 정렬하는 경우 열거형 값을 기준으로 정렬합니다. Windows 서비스의 경우 Stopped의 값은 1이고 실행 값은 4입니다.
중지는 열거된 값 때문에 실행하기 전에 정렬됩니다. 자세한 내용은 ServiceControllerStatus를 참조하세요.
정렬 알고리즘의 성능은 안정적인 정렬을 수행할 때 느립니다.
관련 링크
PowerShell