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 拡張機能で見つかったカウント ファイルで並べ替えられます。 空 の名前 はディレクトリを表します。

この例では、 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 でイベント ログ イベントをグループ化する

次の使用例は、System イベント ログに 1,000 個の最新のエントリを EntryType でグループ化して 表示します

出力の Count 列は、各グループ内のエントリの数を表します。 [名前] 列は、グループを定義する 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 番目のコマンドでは、ドット表記を使用して Get $A.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}

この変数には $hashSystem.Collections.Hashtable オブジェクトが格納されます。 Get-ChildItemはディレクトリからファイル名をC:\Files取得し、System.IO.FileInfo オブジェクトをパイプラインの下に送信します。 Group-Objectは、PropertyExtension を使用してオブジェクトをグループ化します。 CaseSensitive パラメーターと AsHashTable パラメーターはハッシュ テーブルを作成し、キーは大文字と小文字を区別するキー.txtを使用してグループ化されます.TXT

パラメーター

-AsHashTable

このコマンドレットがグループをハッシュ テーブルとして返されることを示します。 ハッシュ テーブルのキーは、オブジェクトをグループ化するためのプロパティの値です。 ハッシュ テーブルの値は、そのプロパティ値を含むオブジェクトです。

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

このコマンドレットがハッシュ テーブル キーを文字列に変換することを示します。 既定では、ハッシュ テーブルのキーは、グループ化されたオブジェクトのインスタンスです。 このパラメーターは、AsHashTable パラメーターと共に使用する場合にのみ有効です。

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

-CaseSensitive

このコマンドレットによってグループ化で大文字と小文字が区別されることを示します。 このパラメーターを指定しない場合、グループ内のオブジェクトのプロパティ値は大文字と小文字が区別されません。

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-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: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

任意のオブジェクトをこのコマンドレットにパイプできます。

出力

GroupInfo

既定では、このコマンドレットは GroupInfo オブジェクトを返します。

Hashtable

AsHashTable パラメーターを使用すると、このコマンドレットは Hashtable オブジェクトを返します。

メモ

PowerShell には、次のエイリアスが Group-Object含まれています。

  • すべてのプラットフォーム:
    • group

書式設定コマンドレットの GroupBy パラメーターを使用して、Format-TableFormat-Listオブジェクトをグループ化できます。 プロパティ値ごとに 1 行の 1 つのテーブルを作成するのとは異なりGroup-Object、GroupBy パラメーターは、プロパティ値を持つ各項目の行を持つ各プロパティ値のテーブルを作成します。

Group-Object では、グループ化されるオブジェクトが同じ Microsoft .NET 型である必要はありません。 さまざまな .NET 型のオブジェクトをグループ化する場合は、 Group-Object 次の規則を使用します。

  • 同じプロパティ名と型。

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

  • 同じプロパティ名、異なる型。

    オブジェクトに指定した名前のプロパティがあり、プロパティ値が異なるオブジェクトの .NET 型が異なる場合は、 Group-Object プロパティの最初に出現する .NET 型をそのプロパティ グループの .NET 型として使用します。 オブジェクトに異なる型のプロパティがある場合、プロパティ値は、そのグループの型に変換されます。 型変換が失敗した場合、オブジェクトはグループに含まれません。

  • プロパティがありません。

    指定したプロパティを持たないオブジェクトはグループ化できません。 グループ化されていないオブジェクトは、GroupInfo という名前AutomationNull.Valueのグループ内の最終的な GroupInfo オブジェクト出力に表示されます。

出力はグループ名で昇順に並べ替えられます。 各グループに属する項目は並べ替えされません。 これらは、受信した順序で一覧表示されます。