Group-Object
指定したプロパティに対して同じ値を含むオブジェクトをグループ化します。
構文
Group-Object
[[-Property] <Object[]>]
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
説明
コマンドレットは Group-Object
、指定したプロパティの値に基づいてグループ内のオブジェクトを表示します。
Group-Object
は、プロパティ値ごとに 1 行のテーブルと、その値を持つ項目の数を表示する列を返します。
複数のプロパティを指定する場合は、 Group-Object
最初に最初のプロパティの値でグループ化し、次に各プロパティ グループ内で次のプロパティの値でグループ化します。
例
例 1: 拡張子でファイルをグループ化する
この例では、 の下 $PSHOME
にあるファイルを再帰的に取得し、ファイル名拡張子でグループ化します。 出力はコマンドレットに Sort-Object
送信され、指定された拡張機能で見つかったカウント ファイルで並べ替えられます。 空の Name は ディレクトリを表します。
この例では、 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 1 {1, 3, 5, 7, 9, 11, 13, 15, 17, 19}
10 0 {2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
例 3: EntryType でイベント ログ イベントをグループ化する
これらのコマンドは、System イベント ログの 1,000 件の最新のエントリを EntryType でグループ化して表示します。
出力では、 Count 列は各グループ内のエントリの数を表し、 Name 列はグループを定義する EventType 値を表し、 Group 列は各グループ内のオブジェクトを表します。
Get-WinEvent -LogName System -MaxEvents 1000 | Group-Object -Property LevelDisplayName
Count Name Group
----- ---- -----
153 Error {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics.�
722 Information {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics.�
125 Warning {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diagnostics.�
例 4: 優先度クラス別にプロセスをグループ化する
この例では、 NoElement パラメーターの効果を示します。 これらのコマンドは、コンピューター上のプロセスを優先度クラス別にグループ化します。
最初のコマンドでは、 コマンドレットを Get-Process
使用して、コンピューター上のプロセスを取得します。
パイプライン演算子 |
を使用して結果を に Group-Object
送信し、プロセスの PriorityClass プロパティの値でオブジェクトをグループ化します。
2 番目のコマンドは、 NoElement パラメーターを使用してグループのメンバーを出力から除外する点を除いて、最初の コマンドと同じです。 結果は、数とプロパティ値名のみを含むテーブルになります。
次のサンプル出力に結果を示します。
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
例 5: プロセスを名前でグループ化する
次の例では、 を使用 Group-Object
して、ローカル コンピューターで実行されているプロセスの複数のインスタンスを使用します。
Get-Process | Group-Object -Property Name -NoElement | Where {$_.count -gt 1}
Count Name
----- ----
2 csrss
5 svchost
2 winlogon
2 wmiprvse
例 8: ハッシュ テーブル内のオブジェクトをグループ化する
この例では、 AsHashTable パラメーターと AsString パラメーターを使用して、ハッシュ テーブル内のグループ (つまり、キーと値のペアのコレクション) を返します。
結果のハッシュ テーブルでは、各プロパティ値がキーで、グループの要素が値です。 各キーがハッシュ テーブルのオブジェクトのプロパティであるため、ドット表記を使用して値を表示します。
最初のコマンドは、セッション内の および コマンドレットを取得 Get
し Set
、動詞でグループ化し、グループをハッシュ テーブルとして返し、ハッシュ テーブルを $A
変数に保存します。
2 番目のコマンドでは、 にハッシュ テーブル $A
が表示されます。
2 つのキーと値のペアがあります。1 つは Get
コマンドレット用、もう 1 つはコマンドレット用 Set
です。
3 番目のコマンドでは、ドット表記を使用して、 の Get キー $A
の値を表示します。
値は CmdletInfo オブジェクトです。
AsString パラメーターは、グループ内のオブジェクトを文字列に変換しません。
$A = Get-Command get-*, set-* -CommandType cmdlet | Group-Object -Property verb -AsHashTable -AsString
$A
Name Value
---- -----
Get {Get-PSCallStack, Get-PSBreakpoint, Get-PSDrive, Get-PSSession...}
Set {Set-Service, Set-StrictMode, Set-PSDebug, Set-PSSessionConfiguration...}
$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
このコマンドレットによってグループがハッシュ テーブルとして返されることを示します。 ハッシュ テーブルのキーは、オブジェクトをグループ化するためのプロパティの値です。 ハッシュ テーブルの値は、そのプロパティ値を含むオブジェクトです。
AsHashTable パラメーター自体は、各キーがグループ化されたオブジェクトのインスタンスである各ハッシュ テーブルを返します。 AsString パラメーターと共に使用する場合、ハッシュ テーブル内のキーは文字列です。
Type: | SwitchParameter |
Aliases: | AHT |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-AsString
このコマンドレットがハッシュ テーブル キーを文字列に変換することを示します。 既定では、ハッシュ テーブルのキーは、グループ化されたオブジェクトのインスタンスです。 このパラメーターは、 AsHashTable パラメーターと共に使用する場合にのみ有効です。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-CaseSensitive
このコマンドレットによってグループ化で大文字と小文字が区別されることを示します。 このパラメーターを指定しない場合、グループ内のオブジェクトのプロパティ値は大文字と小文字が区別されません。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
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-Object
Group-Object
表す 1 つのオブジェクトを受け取ります。
その結果、そのオブジェクトをメンバーとする単一のグループを作成します。
コレクション内のオブジェクトをグループ化するには、オブジェクトを に Group-Object
パイプします。
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-NoElement
このコマンドレットは、結果からグループのメンバーを省略することを示します。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Property
グループ化のためのプロパティを指定します。 オブジェクトは、指定したプロパティの値に基づいてグループに配置されます。
Property パラメーターの値には、新しい計算プロパティを指定できます。 計算された プロパティを作成するには、文字列またはスクリプト ブロック値を指定する Expression キーを使用してハッシュ テーブルを作成します。
Type: | Object[] |
Position: | 0 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
入力
任意のオブジェクトを に Group-Object
パイプできます。
出力
Microsoft.PowerShell.Commands.GroupInfo or System.Collections.Hashtable
AsHashTable パラメーターを使用すると、Group-Object
ハッシュ テーブルが返されます。
それ以外の場合は、 GroupInfo オブジェクトを返します。
メモ
書式設定コマンドレットの GroupBy パラメーター (や
Format-List
などFormat-Table
) を使用して、オブジェクトをグループ化することもできます。 とは異なりGroup-Object
、GroupBy パラメーターは、プロパティ値ごとに行を持つ 1 つのテーブルを作成します。 GroupBy パラメーターは、プロパティ値を持つ各アイテムの行を含む各プロパティ値のテーブルを作成します。Group-Object
では、グループ化されるオブジェクトが同じ Microsoft .NET Framework 型である必要はありません。 異なる.NET Framework型のオブジェクトをグループ化する場合は、Group-Object
次の規則を使用します。同じプロパティ名と型。 オブジェクトに指定された名前のプロパティがあり、プロパティ値が同じ .NET Framework 型の場合、同じ型のオブジェクトに対して使用される同じ規則を使用してプロパティ値がグループ化されます。
同じプロパティ名、異なる型。 オブジェクトに指定した名前のプロパティがあり、プロパティ値が異なるオブジェクトで異なる.NET Framework型を持つ場合、
Group-Object
プロパティの最初の出現の.NET Framework型がそのプロパティ グループの.NET Framework型として使用されます。 オブジェクトに異なる型のプロパティがある場合、プロパティ値は、そのグループの型に変換されます。 型変換に失敗した場合、オブジェクトはグループに含まれません。プロパティがありません。 指定したプロパティがないオブジェクトは、グループ化不能と見なされます。 グループ化できないオブジェクトは、 という名前
AutomationNull.Value
のグループの最終的な GroupInfo オブジェクト出力に表示されます。