次の方法で共有


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 コマンドレットに送信され、指定された拡張機能で見つかったカウント ファイルで並べ替えられます。 空の はディレクトリを表します。

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

これらのコマンドでは、システム イベント ログに 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: ハッシュ テーブル内のオブジェクトをグループ化する

この例では、AsHashTableAsString パラメーターを使用して、キーと値のペアのコレクションとして、ハッシュ テーブル内のグループを返します。

結果のハッシュ テーブルでは、各プロパティ値はキーであり、グループ要素は値です。 各キーはハッシュ テーブル オブジェクトのプロパティであるため、ドット表記を使用して値を表示できます。

最初のコマンドは、セッション内の Get コマンドレットと Set コマンドレットを取得し、動詞でグループ化し、グループをハッシュ テーブルとして返し、ハッシュ テーブルを $A 変数に保存します。

2 番目のコマンドは、ハッシュ テーブルを $Aに表示します。 2 つのキーと値のペアがあります。1 つは Get コマンドレット用と Set コマンドレット用です。

3 番目のコマンドでは、ドット表記を使用して、$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 パラメーターと共に使用する場合、ハッシュ テーブル内のキーは文字列です。

型:SwitchParameter
Aliases:AHT
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-AsString

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

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-CaseSensitive

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

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Culture

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

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-InputObject

グループ化するオブジェクトを指定します。 オブジェクトを含む変数を入力するか、オブジェクトを取得するコマンドまたは式を入力します。

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

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

型:PSObject
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-NoElement

このコマンドレットは、結果からグループのメンバーを省略することを示します。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Property

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

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

型:Object[]
配置:0
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

PSObject

任意のオブジェクトをパイプ処理して Group-Objectできます。

出力

Microsoft.PowerShell.Commands.GroupInfo or System.Collections.Hashtable

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

メモ

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

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

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

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

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