지정한 속성에 대해 같은 값이 있는 개체를 그룹화합니다.

구문

Group-Object [-AsHashTable] [-AsString] [[-Property] <Object[]>] [-CaseSensitive] [-Culture <string>] [-InputObject <psobject>] [-NoElement] [<CommonParameters>]

설명

Group-Object cmdlet은 지정된 속성의 값을 기준으로 그룹의 개체를 표시합니다. Group-Object는.각 속성 값에 대해 행 하나를 포함하는 테이블과 해당 값이 포함된 항목 수를 표시하는 열을 반환합니다.

여러 속성을 지정하는 경우 Group-Object는 먼저 첫 번째 속성의 값을 기준으로 값을 그룹화한 후에 각 속성 그룹 내에서 다음 속성의 값을 기준으로 그룹화합니다.

매개 변수

-AsHashTable

그룹을 해시 테이블로 반환합니다. 해시 테이블의 키는 개체를 그룹화하는 기준인 속성 값입니다. 해시 테이블의 값은 속성 값을 포함하는 개체입니다.

AsHashTable 매개 변수는 단독으로 사용하는 경우 각 키가 그룹화된 개체의 인스턴스인 각 해시 테이블을 반환합니다. AsString 매개 변수와 함께 사용하는 경우 해시 테이블의 키는 문자열입니다.

필수 여부

false

위치

named

기본값

GroupInfo object

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-AsString

해시 테이블 키를 문자열로 변환합니다. 기본적으로 해시 테이블 키는 그룹화된 개체의 인스턴스입니다. 이 매개 변수는 AsHashTable 매개 변수와 함께 사용하는 경우에만 유효합니다.

필수 여부

false

위치

named

기본값

GroupInfo objects

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-CaseSensitive

그룹화에서 대/소문자를 구분하도록 합니다. 이 매개 변수를 사용하지 않으면 그룹에 포함된 개체 속성 값의 대/소문자가 달라질 수 있습니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-Culture <string>

문자열을 비교할 때 사용할 culture를 지정합니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-InputObject <psobject>

그룹화할 개체를 지정합니다. 개체가 포함된 변수를 입력하거나 개체를 가져오는 명령 또는 식을 입력하십시오.

InputObject 매개 변수를 사용하여 개체 컬렉션을 Group-Object로 전송하면 Group-Object는 컬렉션을 나타내는 개체 하나를 받게 됩니다. 따라서 해당 개체가 포함된 단일 그룹을 멤버로 만듭니다.

개체를 컬렉션에 그룹화하려면 해당 개체를 Group-Object로 파이프합니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

true (ByValue)

와일드카드 문자 적용 여부

false

-NoElement

그룹 멤버를 결과에서 생략합니다.

필수 여부

false

위치

named

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

-Property <Object[]>

그룹화할 속성을 지정합니다. 개체는 지정된 속성의 값을 기반으로 하여 그룹으로 정렬됩니다.

Property 매개 변수의 값은 새로 계산된 속성일 수 있습니다. 계산된 속성을 만들려면 문자열 또는 스크립트 블록 값을 지정하는 Expression 키가 있는 해시 테이블을 만드십시오.

필수 여부

false

위치

1

기본값

파이프라인 입력 적용 여부

false

와일드카드 문자 적용 여부

false

<CommonParameters>

이 cmdlet은 -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer, -OutVariable 등의 일반 매개 변수를 지원합니다. 자세한 내용은 about_Commonparameters.

입력 및 출력

입력 유형은 cmdlet으로 파이프할 수 있는 개체의 유형입니다. 반환 유형은 cmdlet에서 반환되는 개체의 유형입니다.

입력

System.Management.Automation.PSObject

임의의 개체를 Group-Object로 파이프할 수 있습니다.

출력

Microsoft.PowerShell.Commands.GroupInfo 또는 System.Collections.Hashtable

AsHashTable 매개 변수를 사용하는 경우 Group-Object는 해시 테이블을 반환합니다. 그 외의 경우에는 GroupInfo 개체를 반환합니다.

참고

Format-Table [m2] 및 Format-List [m2]와 같은 형식 지정 cmdlet의 GroupBy 매개 변수를 사용하여 개체를 그룹화할 수도 있습니다. 각 속성 값에 대한 행이 하나 있는 단일 테이블을 만드는 Group-Object와는 달리, GroupBy 매개 변수는 속성 값이 있는 각 항목에 대해 행 하나가 포함된 각 속성 값의 테이블을 만듭니다.

Group-Object를 사용하는 경우에는 개체를 같은 Microsoft .NET Framework 유형으로 그룹화하지 않아도 됩니다. 그룹을 다른 .NET Framework 유형으로 그룹화할 때 Group-Object는 다음 규칙을 사용합니다.

-- 동일한 속성 이름 및 유형: 개체에 지정한 이름의 속성이 있고 속성 값의 .NET Framework 유형이 같으면 속성 값은 동일한 유형의 개체에 사용되는 것과 같은 규칙을 사용하여 그룹화됩니다.

-- 동일한 속성 이름, 다른 유형: 개체에 지정된 이름의 속성이 있지만 서로 다른 개체의 속성 값의 .NET Framework 유형이 다른 경우 Group-Object는 처음 나타나는 속성의 .NET Framework 유형을 해당 속성 그룹의 .NET Framework 유형으로 사용합니다. 개체에 유형이 다른 속성이 있으면 속성 값은 해당 그룹의 유형으로 변환됩니다. 유형 변환에 실패하면 개체가 그룹에 포함되지 않습니다.

-- 없는 속성: 지정된 속성이 없는 개체는 그룹화할 수 없는 것으로 간주됩니다. 그룹화할 수 없는 개체는 AutomationNull.Value라는 그룹의 최종 GroupInfo 개체 출력에 표시됩니다.

예 1

C:\PS>get-childitem *.doc | group-object -property length

설명
-----------
이 명령은 현재 위치에서 확장명이 .doc인 파일을 가져와 크기별로 그룹화합니다.






예 2

C:\PS>get-childitem | sort-object -property extension | group-object -property extension

설명
-----------
이 명령은 현재 위치에서 파일을 가져와 파일 이름 확장명별로 정렬한 다음 파일 이름 확장명별로 그룹화합니다. 파일은 먼저 정렬된 후에 그룹화됩니다.






예 3

C:\PS>1..35 | group-object -property {$_ % 2},{$_ % 3}

설명
-----------
이 예에서는 스크립트 블록을 Property 매개 변수의 값으로 사용하는 방법을 보여 줍니다. 

이 명령은 2 또는 3으로 나누는 경우의 나머지에 따라 그룹화한 1부터 35까지의 정수를 표시합니다.






예 4

C:\PS>$events = get-eventlog -logname system -newest 1000 

C:\PS> $events | group-object -property eventID 

Count Name                      Group
----- ----                      -----
   44 Information               {System.Diagnostics.EventLogEntry,
    5 Error                     {System.Diagnostics.EventLogEntry,
    1 Warning                   {System.Diagnostics.EventLogEntry}

설명
-----------
이들 명령은 시스템 이벤트 로그에서 이벤트 ID별로 그룹화한 최근 1,000개의 항목을 표시합니다. 

첫 번째 명령은 Get-EventLog cmdlet을 사용하여 이벤트와 할당 연산자(=)를 검색해 $events 변수에 저장합니다. 

두 번째 명령은 파이프라인 연산자(|)를 사용하여 $events 변수의 이벤트를 Group-Object cmdlet으로 보냅니다. 이 명령은 Property 매개 변수를 사용하여 이벤트를 해당 EventID 속성 값에 따라 그룹화하도록 지정합니다. 

출력에서 Count 열은 각 그룹의 항목 수를 나타내고, Name 열은 각각 그룹을 정의하는 EventID 값을 나타내며, Group 열은 각 그룹의 개체를 나타냅니다.






예 5

C:\PS>get-process | group-object -property priorityclass

Count Name                Group
----- ----                -----
   55 Normal              {System.Diagnostics.Process (AdtAgent), System.Diagnostics.Process (alg), System.Dia...
    1                     {System.Diagnostics.Process (Idle)}
    3 High                {System.Diagnostics.Process (Newproc), System.Diagnostics.Process (winlogon), System.D... 
    2 BelowNormal         {System.Diagnostics.Process (winperf),  


C:\PS>get-process | group-object -property company -noelement
Count Name
----- ----
   55 Normal
    1
    3 High
    2 BelowNormal

설명
-----------
이 예에서는 NoElement 매개 변수의 효과를 보여 줍니다. 이들 명령은 우선 순위 클래스를 기준으로 컴퓨터의 프로세스를 그룹화합니다.

첫 번째 명령은 Get-Process cmdlet을 사용하여 컴퓨터의 프로세스를 가져옵니다. 이 명령이 파이프라인 연산자(|)를 사용하여 결과를 Group-Object로 보내면 프로세스의 PriorityClass 속성 값을 기준으로 개체가 그룹화됩니다.

두 번째 명령은 NoElement 매개 변수를 사용하여 출력에서 그룹 멤버를 제거한다는 점을 제외하면 첫 번째 명령과 같습니다. 그러면 개수와 속성 값 이름만 포함된 테이블이 생성됩니다.

결과는 다음과 같은 샘플 출력에 표시됩니다.






예 6

C:\PS>get-eventlog -logname system -newest 1000 | group-object -property {$_.TimeWritten - $_.TimeGenerated}

설명
-----------
이 명령은 Property 매개 변수 값을 스크립트 블록으로 제공하는 방법을 보여 줍니다.

이 명령은 시스템 이벤트 로그에서 생성된 시간과 로그에 기록된 시간의 차이에 따라 그룹화된 최근 1,000개 항목을 표시하고 

Get-EventLog cmdlet을 사용하여 이벤트 로그 항목을 가져옵니다. 이 명령은 파이프라인 연산자(|)를 사용하여 항목을 Group-Object cmdlet으로 보냅니다. Property 매개 변수의 값은 스크립트 블록(괄호로 묶인 식)으로 지정됩니다. 스크립트 블록의 평가 결과는 로그 항목이 생성된 시간과 로그에 기록된 시간의 차이입니다. 이 값은 최근 1000개의 이벤트를 그룹화하는 데 사용됩니다.






예 7

C:\PS>get-childitem | group-object extension -noelement 

Count Name
----- ----
   21
   82 .txt
    9 .cmd
    5 .log
   12 .xml
    5 .htm
   36 .ps1
    1 .psc1
    3 .exe
    6 .csv
    1 .psd1
    2 .bat

설명
-----------
이 명령은 파일 이름 확장명을 기준으로 현재 디렉터리의 항목을 그룹화하며 NoElement 매개 변수를 사용하여 그룹 멤버를 생략합니다.

결과는 다음과 같은 샘플 출력에 표시됩니다.






예 8

C:\PS>"a", "b", "c", "c", "d" | get-unique

a
b
c
d

C:\PS> "a", "b", "c", "c", "d" | group-object -noelement | where {$_.Count -gt 1}
Count Name
----- ----
    2 c

C:\PS> get-process | group-object -property Name -noelement | where {$_.count -gt 1}
Count Name
----- ----
    2 csrss
    5 svchost
    2 winlogon
    2 wmiprvse

설명
-----------
이 예에서는 컬렉션에서 고유한 속성 값과 고유하지 않은(반복되는) 속성 값을 찾는 방법을 보여 줍니다. 

첫 번째 명령은 배열을 Get-Unique cmdlet으로 파이프하여 배열의 고유한 요소를 가져옵니다.

두 번째 명령은 배열의 고유하지 않은 요소를 가져옵니다. 이를 위해 이 명령은 값을 기준으로 개체를 그룹화하는 Group-Object cmdlet에 배열을 파이프합니다. 그 결과로 생성되는 그룹은 Where-Object cmdlet으로 파이프되며, 이 cmdlet은 여러 멤버가 있는 그룹이 포함된 개체를 선택합니다.

세 번째 명령은 이 기술을 실제로 사용하는 방법을 보여 줍니다. 이 명령은 동일한 방법으로 컴퓨터에서 프로세스 이름이 같은 프로세스를 찾습니다.

결과는 다음과 같은 샘플 출력에 표시됩니다.






예 9

C:\PS>$a = get-command get-*, set-* -type cmdlet | group-object -property verb -ashashtable -asstring

C:\PS> $a 

Name    Value
----    -----
Get     {Get-PSCallStack, Get-PSBreakpoint, Get-PSDrive, Get-PSSession...}
Set     {Set-Service, Set-StrictMode, Set-PSDebug, Set-PSSessionConfiguration...}

C:\PS> $a.get

CommandType     Name                 Definition
-----------     ----                 ----------
Cmdlet          Get-PSCallStack      Get-PSCallStack [-Verbose] [-Debug] [-ErrorAction <ActionPrefer...
Cmdlet          Get-PSBreakpoint     Get-PSBreakpoint [[-Id] <Int32[]>] [-Verbose] [-Debug] [-ErrorA...
Cmdlet          Get-PSDrive          Get-PSDrive [[-Name] <String[]>] [-Scope <String>] [-PSProvider...
...

설명
-----------
이 예에서는 AsHashTable 및 AsString 매개 변수를 사용하여 해시 테이블의 그룹을 키-값 쌍 컬렉션으로 반환합니다. 

그 결과로 생성되는 해시 테이블에서 각 속성 값은 키이고 그룹 요소는 값입니다. 각 키는 해시 테이블 개체의 속성이므로 점 표기법으로 값을 표시할 수 있습니다.

첫 번째 명령은 세션의 Get 및 Set cmdlet을 가져와 동사를 기준으로 그룹화한 다음 그룹을 해시 테이블로 반환하여 해시 테이블을 $a 변수에 저장합니다. 

두 번째 명령은 $a의 해시 테이블을 표시합니다. Get cmdlet과 Set cmdlet에 대해 각각 하나씩 두 개의 키-값 쌍이 있습니다.

세 번째 명령은 점 표기법을 사용하여 $a의 Get 키 값을 표시합니다. 이 값은 CmdletInfo 개체입니다. AsString 매개 변수는 그룹 내의 개체를 문자열로 변환하지 않습니다.









목차