指定されたプロパティが同じ値を持つオブジェクトをグループ化します。

構文

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

説明

Group-Object コマンドレットは、指定されたプロパティの値に基づいてオブジェクトをグループ化して表示します。Group-Object は、各行にそれぞれプロパティ値が含まれ、1 つの列にそのプロパティ値を持つ項目の数が含まれている 1 つの表を返します。

複数のプロパティを指定した場合、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>

文字列を比較する際に使用するカルチャを指定します。

必須

false

位置

named

既定値

パイプライン入力を許可する

false

ワイルドカード文字を許可する

false

-InputObject <psobject>

グループ化するオブジェクトを指定します。オブジェクトが格納されている変数を入力するか、オブジェクトを取得するコマンドまたは式を入力します。

InputObject パラメーターを使用してオブジェクトのコレクションを Group-Object に送ると、Group-Object はこのコレクションを表す 1 つのオブジェクトを受け取ります。その結果、そのオブジェクトがメンバーである 1 つのグループが作成されます。

コレクション内のオブジェクトをグループ化するには、Group-Object に対してオブジェクトをパイプ処理します。

必須

false

位置

named

既定値

パイプライン入力を許可する

true (ByValue)

ワイルドカード文字を許可する

false

-NoElement

結果からグループのメンバーを除外します。

必須

false

位置

named

既定値

パイプライン入力を許可する

false

ワイルドカード文字を許可する

false

-Property <Object[]>

グループ化の基準になるプロパティを指定します。オブジェクトは、指定されたプロパティの値に基づいてグループ化されます。

Property パラメーターの値には、新しい集計プロパティを指定できます。集計プロパティを作成するには、文字列またはスクリプト ブロックの値を指定する Expression キーでハッシュ テーブルを作成します。

必須

false

位置

1

既定値

パイプライン入力を許可する

false

ワイルドカード文字を許可する

false

<CommonParameters>

このコマンドレットは、次の共通パラメーターをサポートします: -Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer、および -OutVariable。Ô”¼š¤Ë¤Ä¤¤¤Æ¤Ï¡¢次を参照してください: about_Commonparameters.

入力と出力

入力値の型は、コマンドレットへのパイプが可能なオブジェクトの型です。戻り値の型は、コマンドレットによって返されるオブジェクトの型です。

入力

System.Management.Automation.PSObject

パイプを使用してあらゆるオブジェクトを Group-Object に渡すことができます。

出力

Microsoft.PowerShell.Commands.GroupInfo または System.Collections.Hashtable

AsHashTable パラメーターを使用した場合、Group-Object はハッシュ テーブルを返します。それ以外の場合は、GroupInfo オブジェクトを返します。

書式設定コマンドレット (Format-Table [m2]、Format-List [m2] など) の GroupBy パラメーターを使用して、オブジェクトをグループ化することもできます。各行にそれぞれプロパティ値が含まれる 1 つの表を作成する Group-Object とは異なり、GroupBy パラメーターは、各行にそのプロパティ値を持つ項目がそれぞれ含まれている表をプロパティ値ごとに作成します。

Group-Object の場合、グループ化されるオブジェクトが同じ Microsoft .NET Framework 型である必要はありません。Group-Object は、以下のルールに従って異なる .NET Framework 型のオブジェクトをグループ化します。

-- プロパティ名と型が同じ: オブジェクトに指定された名前のプロパティがあり、プロパティ値の .NET Framework 型が同じ場合、プロパティ値は同じ型のオブジェクトと同じルールを使用してグループ化されます。

-- プロパティ名は同じで、型が異なる: オブジェクトに指定された名前のプロパティがあるが、オブジェクトによってプロパティ値の .NET Framework 型が異なる場合、Group-Object は最初のプロパティの .NET Framework 型をそのプロパティ グループの .NET Framework 型として使用します。オブジェクトのプロパティの型が異なる場合、プロパティ値はそのグループの型に変換されます。型変換が失敗した場合、オブジェクトはそのグループから除外されます。

-- プロパティがない: 指定されたプロパティがないオブジェクトは、グループ化できないと見なされます。グループ化できないオブジェクトは、最後の GroupInfo オブジェクト出力の AutomationNull.Value という名前のグループ内に表示されます。

例 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 パラメーターの値として使用する方法を示しています。

このコマンドは、1 ~ 35 の整数を 2 または 3 で除算した場合の剰余に基づいてグループ化して表示します。






例 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}

説明
-----------
これらのコマンドは、システム イベント ログの最新の 1,000 エントリを EventID に基づいてグループ化して表示します。

最初のコマンドは、Get-EventLog コマンドレットを使用してイベントを取得し、代入演算子 (=) を使用して $events 変数に保存します。

2 番目のコマンドは、パイプライン演算子 (|) を使用して、$events 変数に保存されているイベントを Group-Object コマンドレットに送ります。また、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 コマンドレットを使用してコンピューター上のプロセスを取得します。また、パイプライン演算子 (|) を使用して結果を Group-Object に送ります。このコマンドレットは、プロセスの PriorityClass プロパティの値に基づいてオブジェクトをグループ化します。

2 番目のコマンドは最初のコマンドと同じですが、NoElement パラメーターを使用して出力からグループのメンバーを取り除く点が異なります。結果は数とプロパティ値の名前のみを含む表です。

次のサンプル出力に結果を示します。






例 6

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

説明
-----------
このコマンドは、スクリプト ブロックとして Property パラメーターの値を指定する方法を示しています。

このコマンドは、システム イベント ログの最新の 1,000 エントリを、生成されてからログに書き込まれるまでの時間に基づいてグループ化し、表示します。

このコマンドは、Get-EventLog コマンドレットを使用して、イベント ログ エントリを取得します。また、パイプライン演算子 (|) を使用して、エントリを Group-Object コマンドレットに送信します。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 コマンドレットに対して配列をパイプ処理して、配列の一意の要素を取得します。

2 番目のコマンドは配列の一意でない要素を取得します。また、Group-Object コマンドレットに対して配列をパイプ処理します。このコマンドレットは、値に基づいてオブジェクトをグループ化します。作成されたグループは、Where-Object コマンドレットに対してパイプ処理されます。このコマンドレットは、複数のメンバーを持つグループでオブジェクトを選択します。

3 番目のコマンドはこの方法を実際に使用した例を示しています。同じメソッドを使用して、プロセス名が同じコンピューター上でプロセスを調べます。

次のサンプル出力に結果を示します。






例 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 コマンドレットを取得し、動詞に基づいてグループ化し、グループをハッシュ テーブルとして返し、$a 変数に保存します。

2 番目のコマンドは、$a 変数に保存されたハッシュ テーブルを表示します。Get コマンドレットと Set コマンドレットの 2 つのキーと値のペアが存在します。

3 番目のコマンドは、ドット表記を使用して、$a に保存された Get キーの値を表示します。値は CmdletInfo オブジェクトです。AsString パラメーターはグループ内のオブジェクトを文字列に変換しません。









目次