Group-Object
지정된 속성에 대해 동일한 값을 포함하는 개체를 그룹화합니다.
구문
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
부터 CaseSensitive 및 AsHashtable 매개 변수를 결합하여 대/소문자를 구분하는 해시 테이블을 만들 수 있습니다. 해시 테이블 키는 대/소문자를 구분하는 비교를 사용하고 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: 해시 테이블의 개체 그룹화
이 예제에서는 AsHashTable 및 AsString 매개 변수를 사용하여 해시 테이블의 그룹을 키-값 쌍의 컬렉션으로 반환합니다.
결과 해시 테이블에서 각 속성 값은 키이고 그룹 요소는 값입니다. 각 키는 해시 테이블 개체의 속성이므로 점 표기법을 사용하여 값을 표시할 수 있습니다.
첫 번째 명령은 세션의 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: 대/소문자를 구분하는 해시 테이블 만들기
이 예제에서는 CaseSensitive 및 AsHashTable 매개 변수를 결합하여 대/소문자를 구분하는 해시 테이블을 만듭니다. 예제의 파일에는 확장명이 .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을 포함합니다.
형식: | SwitchParameter |
별칭: | AHT |
Position: | Named |
Default value: | False |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-AsString
이 cmdlet은 해시 테이블 키를 문자열로 변환한다는 것을 나타냅니다. 기본적으로 해시 테이블 키는 그룹화된 개체의 인스턴스입니다. 이 매개 변수는 AsHashTable 매개 변수와 함께 사용할 때만 유효합니다 .
형식: | SwitchParameter |
Position: | Named |
Default value: | False |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-CaseSensitive
이 cmdlet은 그룹화의 대/소문자를 구분합니다. 이 매개 변수가 없으면 그룹에 있는 개체의 속성 값에 다른 사례가 있을 수 있습니다.
PowerShell 7부터 대/소문자를 구분하는 해시 테이블을 만들려면 명령에 CaseSensitive 및 AsHashtable을 포함합니다.
형식: | SwitchParameter |
Position: | Named |
Default value: | False |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Culture
문자열을 비교할 때 사용할 문화권을 지정합니다.
형식: | String |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-InputObject
그룹화할 개체를 지정합니다. 개체를 포함하는 변수를 입력하거나 개체를 가져오는 명령 또는 식을 입력하세요.
InputObject 매개 변수를 사용하여 개체 Group-Object
Group-Object
컬렉션을 제출할 때 컬렉션을 나타내는 하나의 개체를 받습니다. 결과적으로 해당 개체를 멤버로 사용하여 단일 그룹을 만듭니다.
컬렉션의 개체를 그룹화하려면 개체를 파이프합니다 Group-Object
.
형식: | PSObject |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | True |
와일드카드 문자 허용: | False |
-NoElement
이 cmdlet은 결과에서 그룹의 멤버를 생략한다는 것을 나타냅니다.
형식: | SwitchParameter |
Position: | Named |
Default value: | False |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Property
그룹화에 대한 속성을 지정합니다. 개체는 지정된 속성의 값에 따라 명명된 그룹으로 정렬됩니다. 속성이 지정되지 않은 경우 개체는 해당 값 또는 해당 값의 표현으로 ToString()
그룹화됩니다. 출력은 그룹 이름을 기준으로 오름차순으로 정렬됩니다.
Property 매개 변수의 값은 새 계산 속성일 수 있습니다. 계산된 속성은 스크립트 블록 또는 해시 테이블일 수 있습니다. 유효한 키-값 쌍은 다음과 같습니다.
- 식 -
<string>
또는<script block>
자세한 내용은 about_Calculated_Properties 참조하세요.
형식: | Object[] |
Position: | 0 |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
입력
모든 개체를 이 cmdlet으로 파이프할 수 있습니다.
출력
기본적으로 이 cmdlet은 GroupInfo 개체를 반환합니다.
AsHashTable 매개 변수를 사용하는 경우 이 cmdlet은 Hashtable 개체를 반환합니다.
참고
PowerShell에는 다음 별칭이 포함됩니다.Group-Object
- 모든 플랫폼:
group
형식 지정 cmdlet의 GroupBy 매개 변수(예: Format-Table
및 Format-List
)를 사용하여 개체를 그룹화할 수 있습니다. 각 속성 값에 대해 행이 있는 단일 테이블을 만드는 것과 달리 Group-Object
GroupBy 매개 변수는 속성 값이 있는 각 항목에 대해 행이 있는 각 속성 값에 대한 테이블을 만듭니다.
Group-Object
에서는 그룹화되는 개체가 동일한 Microsoft .NET 형식일 필요가 없습니다.
다른 .NET 형식 Group-Object
의 개체를 그룹화할 때는 다음 규칙을 사용합니다.
동일한 속성 이름 및 형식입니다.
개체에 지정된 이름의 속성이 있고 속성 값의 .NET 형식이 같으면 속성 값은 동일한 형식의 개체에 사용되는 것과 동일한 규칙으로 그룹화됩니다.
동일한 속성 이름, 다른 형식.
개체에 지정된 이름의 속성이 있지만 속성 값이 다른 개체
Group-Object
에서 다른 .NET 형식을 갖는 경우 속성의 첫 번째 발생 .NET 형식을 해당 속성 그룹의 .NET 형식으로 사용합니다. 개체에 다른 형식의 속성이 있으면 속성 값이 해당 그룹의 형식으로 변환됩니다. 형식 변환에 실패하면 개체가 그룹에 포함되지 않습니다.누락된 속성입니다.
지정된 속성이 없는 개체는 그룹화할 수 없습니다. 그룹화되지 않은 개체는 그룹의
AutomationNull.Value
최종 GroupInfo 개체 출력에 나타납니다.
출력은 그룹 이름을 기준으로 오름차순으로 정렬됩니다. 각 그룹에 속하는 항목은 정렬되지 않습니다. 수신된 순서대로 나열됩니다.
관련 링크
PowerShell