Group-Object
指定したプロパティに対して同じ値を含むオブジェクトをグループ化します。
構文
Group-Object
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
説明
Group-Object
コマンドレットは、指定したプロパティの値に基づいて、グループ内のオブジェクトを表示します。
Group-Object
は、プロパティ値ごとに 1 行のテーブルと、その値を持つ項目の数を表示する列を返します。
複数のプロパティを指定 Group-Object
、最初に最初のプロパティの値でグループ化し、次に各プロパティ グループ内で次のプロパティの値でグループ化します。
PowerShell 7 以降、 Group-Object
では、 CaseSensitive パラメーターと AsHashtable パラメーターを組み合わせて、大文字と小文字を区別するハッシュ テーブルを作成できます。 ハッシュ テーブル キーでは、大文字と小文字が区別される比較が使用され、 System.Collections.Hashtable オブジェクトが出力されます。
例
例 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 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 でイベント ログ イベントをグループ化する
次の使用例は、システム イベント ログに 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.Diag...}
722 Information {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diag...}
125 Warning {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diag...}
例 5: 優先順位クラス別にプロセスをグループ化する
この例では、 NoElement パラメーターの効果を示します。 これらのコマンドは、コンピューター上のプロセスを優先度クラス別にグループ化します。
最初のコマンドでは、 Get-Process
コマンドレットを使用してコンピューター上のプロセスを取得し、パイプラインの下にオブジェクトを送信します。 Group-Object
は、プロセスの PriorityClass プロパティの値によってオブジェクトをグループ化します。
2 番目の例では、 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
と Set
コマンドレットを取得し、動詞でグループ化し、グループをハッシュ テーブルとして返し、ハッシュ テーブルを $A
変数に保存します。
2 番目のコマンドは、ハッシュ テーブルを $A
に表示します。 2 つのキーと値のペアがあります。1 つは Get
コマンドレット用、1 つは Set
コマンドレット用です。
3 番目のコマンドはドット表記を使用$A.Get
、$A
の Get キーの値を表示します。 値は 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
は、 Property 値 Extension を使用してオブジェクトをグループ化します。 CaseSensitive パラメーターと AsHashTable パラメーターはハッシュ テーブルを作成し、キーは大文字と小文字を区別するキー.txt
と.TXT
を使用してグループ化されます。
パラメーター
-AsHashTable
このコマンドレットがグループをハッシュ テーブルとして返されることを示します。 ハッシュ テーブルのキーは、オブジェクトをグループ化するためのプロパティの値です。 ハッシュ テーブルの値は、そのプロパティ値を含むオブジェクトです。
単独で、 AsHashTable パラメーターは、各キーがグループ化されたオブジェクトのインスタンスである各ハッシュ テーブルを返します。 AsString パラメーターと共に使用する場合、ハッシュ テーブル内のキーは文字列です。
PowerShell 7 以降では、大文字と小文字を区別するハッシュ テーブルを作成するために、コマンドに CaseSensitive と AsHashtable を含めます。
型: | SwitchParameter |
Aliases: | AHT |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-AsString
このコマンドレットがハッシュ テーブル キーを文字列に変換することを示します。 既定では、ハッシュ テーブルのキーは、グループ化されたオブジェクトのインスタンスです。 このパラメーターは、 AsHashTable パラメーターと共に使用する場合にのみ有効です。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-CaseSensitive
このコマンドレットによってグループ化で大文字と小文字が区別されることを示します。 このパラメーターを指定しない場合、グループ内のオブジェクトのプロパティ値は大文字と小文字が区別されません。
PowerShell 7 以降では、大文字と小文字を区別するハッシュ テーブルを作成するために、コマンドに CaseSensitive と AsHashtable を含めます。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Culture
文字列を比較するときに使用するカルチャを指定します。
型: | String |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-InputObject
オブジェクトをグループに指定します。 オブジェクトが格納されている変数を入力するか、オブジェクトを取得するコマンドまたは式を入力します。
InputObject パラメーターを使用してオブジェクトのコレクションをGroup-Object
に送信すると、Group-Object
はコレクションを表す 1 つのオブジェクトを受け取ります。 その結果、そのオブジェクトをメンバーとする単一のグループを作成します。
コレクション内のオブジェクトをグループ化するには、オブジェクトをパイプして Group-Object
します。
型: | PSObject |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-NoElement
このコマンドレットは、結果からグループのメンバーを省略することを示します。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Property
グループ化のためのプロパティを指定します。 オブジェクトは、指定されたプロパティの値に基づいて名前付きグループに配置されます。 プロパティが指定されていない場合、オブジェクトは値または値の ToString()
表現によってグループ化されます。 出力はグループ名で昇順に並べ替えられます。
Property パラメーターの値には、新しい計算プロパティを指定できます。 計算プロパティには、スクリプト ブロックまたはハッシュ テーブルを指定できます。 有効なキーと値のペアは次のとおりです。
- 式 -
<string>
または<script block>
詳細については、「 about_Calculated_Properties」を参照してください。
型: | Object[] |
配置: | 0 |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
入力
任意のオブジェクトをこのコマンドレットにパイプできます。
出力
既定では、このコマンドレットは GroupInfo オブジェクトを返します。
AsHashTable パラメーターを使用すると、このコマンドレットは Hashtable オブジェクトを返します。
メモ
PowerShell には、 Group-Object
の次のエイリアスが含まれています。
- すべてのプラットフォーム:
group
Format-Table
やFormat-List
などの書式設定コマンドレットの GroupBy パラメーターを使用して、オブジェクトをグループ化できます。 プロパティ値ごとに 1 行のテーブルを作成する Group-Object
とは異なり、 GroupBy パラメーターは、プロパティ値を持つ各項目の行を持つ各プロパティ値のテーブルを作成します。
Group-Object
では、グループ化されるオブジェクトが同じ Microsoft .NET 型である必要はありません。
さまざまな .NET 型のオブジェクトをグループ化する場合、 Group-Object
は次の規則を使用します。
同じプロパティ名と型。
オブジェクトに指定した名前のプロパティがあり、プロパティ値の .NET 型が同じである場合、プロパティ値は、同じ型のオブジェクトに使用されるのと同じ規則によってグループ化されます。
同じプロパティ名、異なる型。
オブジェクトに指定した名前のプロパティがあるが、プロパティ値が異なるオブジェクトで異なる .NET 型を持つ場合、
Group-Object
はそのプロパティ グループの .NET 型としてプロパティの最初に出現する .NET 型を使用します。 オブジェクトに異なる型のプロパティがある場合、プロパティ値は、そのグループの型に変換されます。 型変換が失敗した場合、オブジェクトはグループに含まれません。プロパティがありません。
指定したプロパティを持たないオブジェクトはグループ化できません。 グループ化されていないオブジェクトは、
AutomationNull.Value
という名前のグループ内の最終的な GroupInfo オブジェクト出力に表示されます。
出力はグループ名で昇順に並べ替えられます。 各グループに属する項目は並べ替えされません。 これらは、受信した順序で一覧表示されます。
関連リンク
PowerShell