Group-Object

지정된 속성에 대해 동일한 값을 포함하는 개체를 그룹화합니다.

Syntax

Group-Object
     [-NoElement]
     [-AsHashTable]
     [-AsString]
     [-InputObject <PSObject>]
     [[-Property] <Object[]>]
     [-Culture <String>]
     [-CaseSensitive]
     [<CommonParameters>]

Description

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

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

PowerShell 7 Group-Object 부터 CaseSensitiveAsHashtable 매개 변수를 결합하여 대/소문자를 구분하는 해시 테이블을 만들 수 있습니다. 해시 테이블 키는 대/소문자를 구분하는 비교를 사용하고 System.Collections.Hashtable 개체를 출력합니다.

예제

예제 1: 확장명별 파일 그룹화

이 예제에서는 파일을 재귀적으로 가져오 $PSHOME 고 파일 이름 확장명별로 그룹화합니다. 출력은 지정된 확장에 Sort-Object 대해 찾은 개수 파일별로 정렬되는 cmdlet으로 전송됩니다. 빈 이름은 디렉터리를 나타냅니다.

이 예제에서는 NoElement 매개 변수를 사용하여 그룹의 멤버를 생략합니다.

$files = Get-ChildItem -Path $PSHOME -Recurse
$files |
    Group-Object -Property extension -NoElement |
    Sort-Object -Property Count -Descending

Count Name
----- ----
  365 .xml
  231 .cdxml
  197
  169 .ps1xml
  142 .txt
  114 .psd1
   63 .psm1
   49 .xsd
   36 .dll
   15 .mfl
   15 .mof
...

예제 2: 확률 및 짝수로 정수 그룹화

이 예제에서는 스크립트 블록을 Property 매개 변수의 값으로 사용하는 방법을 보여 줍니다. 이 명령은 1에서 20까지의 정수( 확률 및 짝수로 그룹화됨)를 표시합니다.

1..20 | Group-Object -Property {$_ % 2}

Count Name                      Group
----- ----                      -----
   10 0                         {2, 4, 6, 8...}
   10 1                         {1, 3, 5, 7...}

예제 3: 키 값으로 해시 테이블 그룹화

PowerShell 6 Group-Object 부터는 키 값별로 해시 테이블 입력의 정렬을 지원합니다. 다음 예제에서는 해시 테이블의 배열을 각 해시 테이블 weight 의 키 값으로 그룹화합니다.

이 예제에서는 NoElement 매개 변수를 사용하여 그룹의 멤버를 생략합니다.

@(
    @{ name = 'a' ; weight = 7 }
    @{ name = 'b' ; weight = 1 }
    @{ name = 'c' ; weight = 3 }
    @{ name = 'd' ; weight = 7 }
) | Group-Object -Property weight -NoElement

Count Name
----- ----
    1 1
    1 3
    2 7

예제 4: EntryType별로 이벤트 로그 이벤트 그룹화

다음은 EntryType별로 그룹 화된 시스템 이벤트 로그에 1,000개의 가장 최근 항목을 표시하는 예제입니다.

출력 에서 Count 열은 각 그룹의 항목 수를 나타냅니다. 이름 열은 그룹을 정의하는 EventType 값을 나타냅니다. 그룹 열은 각 그룹의 개체를 나타냅니다.

Get-WinEvent -LogName System -MaxEvents 1000 | Group-Object -Property LevelDisplayName

Count Name          Group
----- ----          -----
  153 Error         {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diag...}
  722 Information   {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diag...}
  125 Warning       {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diag...}

예제 5: 우선 순위 클래스별 프로세스 그룹화

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

첫 번째 명령은 cmdlet을 사용하여 Get-Process 컴퓨터의 프로세스를 가져와서 개체를 파이프라인 아래로 보냅니다. Group-Object는 프로세스의 PriorityClass 속성 값으로 개체를 그룹화합니다.

두 번째 예제에서는 NoElement 매개 변수를 사용하여 출력에서 그룹의 멤버를 제거합니다. 결과는 Count 및 Name 속성 값만 있는 테이블입니다.

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

Get-Process | Group-Object -Property PriorityClass

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

Get-Process | Group-Object -Property PriorityClass -NoElement

Count Name
----- ----
   55 Normal
    1
    3 High
    2 BelowNormal

예제 6: 이름으로 프로세스 그룹화

다음 예제에서는 로컬 컴퓨터에서 실행 중인 프로세스의 여러 인스턴스를 그룹화 하는 데 사용 Group-Object 합니다. Where-Object 는 둘 이상의 인스턴스가 있는 프로세스를 표시합니다.

Get-Process | Group-Object -Property Name -NoElement | Where-Object {$_.Count -gt 1}

Count Name
----- ----
2     csrss
5     svchost
2     winlogon
2     wmiprvse

예제 7: 해시 테이블의 개체 그룹화

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

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

첫 번째 명령은 세션의 Get and cmdlet을 가져오고 Set 동사별로 그룹화하고, 그룹을 해시 테이블로 반환하고, 해시 테이블을 변수에 $A 저장합니다.

두 번째 명령은 해시 테이블을 $A표시합니다. 두 개의 키-값 쌍이 있습니다. 하나는 Get cmdlet용이고 다른 하나는 cmdlet에 대한 Set 쌍입니다.

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

$A = Get-Command Get-*, Set-* -CommandType cmdlet |
     Group-Object -Property Verb -AsHashTable -AsString
$A

Name     Value
----     -----
Get      {Get-Acl, Get-Alias, Get-AppLockerFileInformation, Get-AppLockerPolicy...}
Set      {Set-Acl, Set-Alias, Set-AppBackgroundTaskResourcePolicy, Set-AppLockerPolicy...}

$A.Get

CommandType     Name                              Version    Source
-----------     ----                              -------    ------
Cmdlet          Get-Acl                           7.0.0.0    Microsoft.PowerShell.Security
Cmdlet          Get-Alias                         7.0.0.0    Microsoft.PowerShell.Utility
Cmdlet          Get-AppLockerFileInformation      2.0.0.0    AppLocker
Cmdlet          Get-AppLockerPolicy               2.0.0.0    AppLocker
...

예제 8: 대/소문자를 구분하는 해시 테이블 만들기

이 예제에서는 CaseSensitiveAsHashTable 매개 변수를 결합하여 대/소문자를 구분하는 해시 테이블을 만듭니다. 예제의 파일에는 확장명이 .txt 있고 ..TXT

$hash = Get-ChildItem -Path C:\Files |
        Group-Object -Property Extension -CaseSensitive -AsHashTable
$hash

Name           Value
----           -----
.TXT           {C:\Files\File7.TXT, C:\Files\File8.TXT, C:\Files\File9.TXT}
.txt           {C:\Files\file1.txt, C:\Files\file2.txt, C:\Files\file3.txt}

변수는 $hash System.Collections.Hashtable 개체를 저장합니다. Get-ChildItem디렉터리에서 C:\Files 파일 이름을 가져오고 System.IO.FileInfo 개체를 파이프라인 아래로 보냅니다. Group-Object속성 값 확장을 사용하여 개체를 그룹화합니다. CaseSensitive 및 AsHashTable 매개 변수는 해시 테이블을 만들고 키는 대/소문자를 구분하는 키를 .txt 사용하여 그룹화됩니다.TXT.

매개 변수

-AsHashTable

이 cmdlet은 그룹을 해시 테이블로 반환한다는 것을 나타냅니다. 해시 테이블의 키는 개체가 그룹화되는 속성 값입니다. 해시 테이블의 값은 해당 속성 값이 있는 개체입니다.

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

PowerShell 7부터 대/소문자를 구분하는 해시 테이블을 만들려면 명령에 CaseSensitive 및 AsHashtable을 포함합니다.

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

-AsString

이 cmdlet은 해시 테이블 키를 문자열로 변환한다는 것을 나타냅니다. 기본적으로 해시 테이블 키는 그룹화된 개체의 인스턴스입니다. 이 매개 변수는 AsHashTable 매개 변수와 함께 사용할 때만 유효합니다 .

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

-CaseSensitive

이 cmdlet은 그룹화의 대/소문자를 구분합니다. 이 매개 변수가 없으면 그룹에 있는 개체의 속성 값에 다른 사례가 있을 수 있습니다.

PowerShell 7부터 대/소문자를 구분하는 해시 테이블을 만들려면 명령에 CaseSensitive 및 AsHashtable을 포함합니다.

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

-Culture

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

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

-InputObject

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

InputObject 매개 변수를 사용하여 개체 Group-ObjectGroup-Object 컬렉션을 제출할 때 컬렉션을 나타내는 하나의 개체를 받습니다. 결과적으로 해당 개체를 멤버로 사용하여 단일 그룹을 만듭니다.

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

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

-NoElement

이 cmdlet은 결과에서 그룹의 멤버를 생략한다는 것을 나타냅니다.

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

-Property

그룹화에 대한 속성을 지정합니다. 개체는 지정된 속성의 값에 따라 명명된 그룹으로 정렬됩니다. 속성이 지정되지 않은 경우 개체는 해당 값 또는 해당 값의 표현으로 ToString() 그룹화됩니다. 출력은 그룹 이름을 기준으로 오름차순으로 정렬됩니다.

Property 매개 변수의 값은 새 계산 속성일 수 있습니다. 계산된 속성은 스크립트 블록 또는 해시 테이블일 수 있습니다. 유효한 키-값 쌍은 다음과 같습니다.

  • 식 - <string> 또는 <script block>

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

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

입력

PSObject

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

출력

GroupInfo

기본적으로 이 cmdlet은 GroupInfo 개체를 반환합니다.

Hashtable

AsHashTable 매개 변수를 사용하는 경우 이 cmdlet은 Hashtable 개체를 반환합니다.

참고

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

  • 모든 플랫폼:
    • group

형식 지정 cmdlet의 GroupBy 매개 변수(예: Format-TableFormat-List)를 사용하여 개체를 그룹화할 수 있습니다. 각 속성 값에 대해 행이 있는 단일 테이블을 만드는 것과 달리 Group-ObjectGroupBy 매개 변수는 속성 값이 있는 각 항목에 대해 행이 있는 각 속성 값에 대한 테이블을 만듭니다.

Group-Object 에서는 그룹화되는 개체가 동일한 Microsoft .NET 형식일 필요가 없습니다. 다른 .NET 형식 Group-Object 의 개체를 그룹화할 때는 다음 규칙을 사용합니다.

  • 동일한 속성 이름 및 형식입니다.

    개체에 지정된 이름의 속성이 있고 속성 값의 .NET 형식이 같으면 속성 값은 동일한 형식의 개체에 사용되는 것과 동일한 규칙으로 그룹화됩니다.

  • 동일한 속성 이름, 다른 형식.

    개체에 지정된 이름의 속성이 있지만 속성 값이 다른 개체 Group-Object 에서 다른 .NET 형식을 갖는 경우 속성의 첫 번째 발생 .NET 형식을 해당 속성 그룹의 .NET 형식으로 사용합니다. 개체에 다른 형식의 속성이 있으면 속성 값이 해당 그룹의 형식으로 변환됩니다. 형식 변환에 실패하면 개체가 그룹에 포함되지 않습니다.

  • 누락된 속성입니다.

    지정된 속성이 없는 개체는 그룹화할 수 없습니다. 그룹화되지 않은 개체는 그룹의 AutomationNull.Value최종 GroupInfo 개체 출력에 나타납니다.

출력은 그룹 이름을 기준으로 오름차순으로 정렬됩니다. 각 그룹에 속하는 항목은 정렬되지 않습니다. 수신된 순서대로 나열됩니다.