Sort-Object

속성 값을 기준으로 개체를 정렬합니다.

Syntax

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-ObjectLength 매개 변수를 사용하여 파일을 길이별로 오름차순으로 정렬합니다.

예제 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-ObjectLast 매개 변수를 사용하여 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 매개 변수를 사용하여 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

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-ObjectUnique 매개 변수를 사용하여 중복된 컴퓨터 이름을 제거합니다. 목록은 기본 순서로 오름차순으로 정렬됩니다.

예제 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-ObjectLengthName 매개 변수를 사용하여 파일을 길이별로 오름차순으로 정렬합니다. 이후 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에서 도입되었습니다.

Type:Int32
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-CaseSensitive

정렬이 대/소문자를 구분한다는 것을 나타냅니다. 기본적으로 정렬은 대/소문자를 구분하지 않습니다.

Type:SwitchParameter
Position:Named
Default value:Case-insensitive
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Culture

정렬에 사용할 culture 구성을 지정합니다. 시스템의 문화권 구성을 표시하는 데 사용합니다 Get-Culture .

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Descending

개체를 내림차순으로 정렬한다는 것을 Sort-Object 나타냅니다. 기본값은 오름차순입니다.

여러 정렬 순서를 사용하여 여러 속성을 정렬하려면 해시 테이블을 사용합니다. 예를 들어 해시 테이블을 사용하면 한 속성을 오름차순으로 정렬하고 다른 속성을 내림차순으로 정렬할 수 있습니다.

Type:SwitchParameter
Position:Named
Default value:Ascending
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

개체를 정렬하려면 파이프라인 Sort-Object아래로 보냅니다. InputObject 매개 변수를 사용하여 항목 Sort-Object 컬렉션을 제출하는 경우 컬렉션을 나타내는 하나의 개체를 받습니다. 하나의 개체를 정렬 Sort-Object 할 수 없으므로 전체 컬렉션을 변경하지 않고 반환합니다.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Property

개체를 정렬하는 Sort-Object 데 사용하는 속성 이름을 지정합니다. 야생카드 허용됩니다. 개체는 속성 값에 따라 정렬됩니다. 속성을 Sort-Object 지정하지 않으면 개체 형식 또는 개체 자체에 대한 기본 속성을 기준으로 정렬합니다.

쉼표로 여러 속성을 구분합니다. 여러 속성을 오름차순, 내림차순 또는 정렬 순서의 조합으로 정렬할 수 있습니다. 여러 속성을 지정하면 개체가 첫 번째 속성별로 정렬됩니다. 여러 개체가 첫 번째 속성에 대해 동일한 값을 갖는 경우 해당 개체는 두 번째 속성을 기준으로 정렬됩니다. 지정된 속성이나 개체 그룹이 더 이상 없을 때까지 이 프로세스가 계속됩니다.

속성 매개 변수의 값은 계산된 속성일 수 있습니다. 계산된 속성을 만들려면 scriptblock 또는 해시 테이블을 사용합니다.

해시 테이블의 유효한 키는 다음과 같습니다.

  • expression - <string> 또는 <script block>
  • ascending 또는 descending - <boolean>

자세한 내용은 about_Calculated_Properties 참조하세요.

Type:Object[]
Position:0
Default value:Default properties
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Stable

정렬된 개체는 정렬 조건이 같을 때 받은 순서대로 전달됩니다.

이 매개 변수는 PowerShell v6.2.0에 추가되었습니다.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Top

정렬된 개체 배열의 시작부터 가져올 개체 수를 지정합니다. 이렇게 하면 안정적인 정렬이 수행됩니다.

이 매개 변수는 PowerShell 6.0에서 도입되었습니다.

Type:Int32
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Unique

중복 항목을 제거하고 컬렉션의 고유 멤버만 반환한다는 것을 Sort-Object 나타냅니다. 고유 값의 첫 번째 인스턴스는 정렬된 출력에 포함됩니다.

고유 는 대/소문자를 구분하지 않습니다. 문자 대/소문자만 다른 문자열은 동일한 것으로 간주됩니다. 예를 들어 문자 및 CHARACTER입니다.

Type:SwitchParameter
Position:Named
Default value:All
Required:False
Accept pipeline input:False
Accept wildcard characters:False

입력

PSObject

정렬할 개체를 이 cmdlet으로 파이프할 수 있습니다.

출력

PSObject

이 cmdlet은 정렬된 개체를 반환합니다.

참고

PowerShell에는 다음 별칭이 포함됩니다.Sort-Object

  • Windows:
    • sort

cmdlet은 Sort-Object 명령에 지정된 속성 또는 개체 형식에 대한 기본 정렬 속성을 기반으로 개체를 정렬합니다. 기본 정렬 속성은 파일에서 명명된 속성을 PropertySetDefaultKeyPropertySettypes.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를 참조하세요.

정렬 알고리즘의 성능은 안정적인 정렬을 수행할 때 느립니다.