Group-Object

Grupperar objekt som innehåller samma värde för angivna egenskaper.

Syntax

HashTable

Group-Object
    [[-Property] <Object[]>]
    [-NoElement]
    [-AsHashTable]
    [-AsString]
    [-InputObject <PSObject>]
    [-Culture <String>]
    [-CaseSensitive]
    [<CommonParameters>]

Description

Cmdleten Group-Object visar objekt i grupper baserat på värdet för en angiven egenskap. Group-Object returnerar en tabell med en rad för varje egenskapsvärde och en kolumn som visar antalet objekt med det värdet.

Om du anger mer än en egenskap grupperar Group-Object först dem efter värdena för den första egenskapen och grupperar dem sedan efter värdet för nästa egenskap inom varje egenskapsgrupp.

Från och med PowerShell 7 kan Group-Object kombinera parametrarna CaseSensitive och AsHashtable för att skapa en skiftlägeskänslig hashtabell. Hash-tabellnycklarna använder skiftlägeskänsliga jämförelser och matar ut ett System.Collections.Hashtable--objekt.

Exempel

Exempel 1: Gruppera filer efter tillägg

Det här exemplet hämtar rekursivt filerna under $PSHOME och grupperar dem efter filnamnstillägg. Utdata skickas till cmdleten Sort-Object, som sorterar dem efter antalet filer som hittas för det angivna tillägget. Det tomma Namn representerar kataloger.

I det här exemplet används parametern NoElement för att utelämna medlemmarna i gruppen.

$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
...

Exempel 2: Gruppera heltal efter odds och jämnare

Det här exemplet visar hur du använder skriptblock som värdet för parametern Property. Det här kommandot visar heltal från 1 till 20, grupperade efter odds och till och med.

1..20 | Group-Object -Property {$_ % 2}
Count Name                      Group
----- ----                      -----
   10 0                         {2, 4, 6, 8...}
   10 1                         {1, 3, 5, 7...}

Exempel 3: Gruppera hashtables efter nyckelvärde

Från och med PowerShell 6 stöder Group-Object sortering av hashtable indata efter nyckelvärden. I följande exempel grupperas en matris med hashtables efter värdet för varje hashtables weight nyckel.

I det här exemplet används parametern NoElement för att utelämna medlemmarna i gruppen.

@(
    @{ 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

Exempel 4: Gruppera händelselogghändelser efter EntryType

I det här exemplet visas de 1 000 senaste posterna i systemhändelseloggen, grupperade efter EntryType.

I utdata representerar kolumnen Count antalet poster i varje grupp. Kolumnen Name representerar EventType värden som definierar en grupp. Kolumnen Grupp representerar objekten i varje grupp.

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

Exempel 5: Gruppera processer efter prioritetsklass

Det här exemplet visar effekten av parametern NoElement. Dessa kommandon grupperar processerna på datorn efter prioritetsklass.

Det första kommandot använder cmdleten Get-Process för att hämta processerna på datorn och skickar objekten nedåt i pipelinen. Group-Objectgrupperar objekten efter värdet för egenskapen PriorityClass i processen.

I det andra exemplet används parametern NoElement för att ta bort medlemmarna i gruppen från utdata. Resultatet är en tabell med egenskapsvärdet Count och Name.

Resultaten visas i följande exempelutdata.

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

Exempel 6: Gruppera processer efter namn

I följande exempel används Group-Object för att gruppera flera instanser av processer som körs på den lokala datorn. Where-Object visar processer med fler än en instans.

Get-Process | Group-Object -Property Name -NoElement | Where-Object {$_.Count -gt 1}
Count Name
----- ----
2     csrss
5     svchost
2     winlogon
2     wmiprvse

Exempel 7: Gruppera objekt i en hash-tabell

I det här exemplet används parametrarna AsHashTable och AsString för att returnera grupperna i en hashtabell som en samling nyckel/värde-par.

I den resulterande hash-tabellen är varje egenskapsvärde en nyckel och gruppelementen är värdena. Eftersom varje nyckel är en egenskap för hash-tabellobjektet kan du använda punkt notation för att visa värdena.

Det första kommandot hämtar cmdletarna Get och Set i sessionen, grupperar dem efter verb, returnerar grupperna som en hashtabell och sparar hashtabellen i variabeln $A.

Det andra kommandot visar hash-tabellen i $A. Det finns två nyckel/värde-par, ett för Get-cmdletar och ett för Set cmdletar.

Det tredje kommandot använder punkt notation, $A.Get för att visa värdena för nyckeln Hämta i $A. Värdena är CmdletInfo-objekt. Parametern AsString konverterar inte objekten i grupperna till strängar.

$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
...

Exempel 8: Skapa en skiftlägeskänslig hash-tabell

I det här exemplet kombineras parametrarna CaseSensitive och AsHashTable för att skapa en skiftlägeskänslig hashtabell. Filerna i exemplet har tillägg av .txt och .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}

Variabeln $hash lagrar objektet System.Collections.Hashtable. Get-ChildItem hämtar filnamnen från katalogen C:\Files och skickar objekten System.IO.FileInfo i pipelinen. Group-Object grupperar objekten med värdet egenskapExtension. Parametrarna CaseSensitive och AsHashTable skapar hash-tabellen och nycklarna grupperas med skiftlägeskänsliga nycklar .txt och .TXT.

Parametrar

-AsHashTable

Anger att denna cmdlet returnerar gruppen som en hash-tabell. Nycklarna i hash-tabellen är de egenskapsvärden som objekten grupperas efter. Värdena i hash-tabellen är de objekt som har det egenskapsvärdet.

I sig själv returnerar parametern AsHashTable varje hashtabell där varje nyckel är en instans av det grupperade objektet. När de används med parametern AsString är nycklarna i hash-tabellen strängar.

Från och med PowerShell 7, för att skapa skiftlägeskänsliga hash-tabeller, inkludera CaseSensitive och AsHashtable i kommandot.

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:False
Stöder jokertecken:False
DontShow:False
Alias:AHT

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-AsString

Anger att denna cmdlet konverterar hashtabellnycklarna till strängar. Som standard är hashtabellnycklarna instanser av det grupperade objektet. Den här parametern är endast giltig när den används med parametern AsHashTable.

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:False
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-CaseSensitive

Anger att denna cmdlet gör gruppering skiftlägeskänslig. Utan den här parametern kan egenskapsvärdena för objekt i en grupp ha olika fall.

Från och med PowerShell 7, för att skapa skiftlägeskänsliga hash-tabeller, inkludera CaseSensitive och AsHashtable i kommandot.

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:False
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-Culture

Anger vilken kultur som ska användas vid jämförelse av strängar.

Parameteregenskaper

Typ:String
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-InputObject

Anger vilka objekt som ska grupperas. Ange en variabel som innehåller objekten eller skriv ett kommando eller uttryck som hämtar objekten.

När du använder parametern InputObject för att skicka en samling objekt till Group-Objecttar Group-Object emot ett objekt som representerar samlingen. Det innebär att den skapar en enda grupp med objektet som medlem.

Gruppera objekten i en samling genom att skicka objekten till Group-Object.

Parameteregenskaper

Typ:PSObject
Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:True
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-NoElement

Anger att denna cmdlet utelämnar medlemmarna i en grupp från resultaten.

Parameteregenskaper

Typ:SwitchParameter
Standardvärde:False
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:Named
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

-Property

Anger egenskaperna för gruppering. Objekten ordnas i namngivna grupper baserat på värdet för de angivna egenskaperna. När ingen egenskap anges grupperas objekt efter deras värde eller ToString() representation av deras värde. Utdata sorteras i stigande ordning efter gruppnamnen.

Värdet för parametern Property kan vara en ny beräknad egenskap. Den beräknade egenskapen kan vara ett skriptblock eller en hash-tabell. Giltiga nyckel/värde-par är:

  • Uttryck – <string> eller <script block>

Mer information finns i about_Calculated_Properties.

Parameteregenskaper

Typ:

Object[]

Standardvärde:None
Stöder jokertecken:False
DontShow:False

Parameteruppsättningar

(All)
Position:0
Obligatorisk:False
Värde från pipeline:False
Värde från pipeline efter egenskapsnamn:False
Värde från återstående argument:False

CommonParameters

Den här cmdleten stöder vanliga parametrar: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction och -WarningVariable. Mer information finns i about_CommonParameters.

Indata

PSObject

Du kan skicka valfritt objekt till den här cmdleten.

Utdata

GroupInfo

Som standard returnerar den här cmdleten ett GroupInfo--objekt.

Hashtable

När du använder parametern AsHashTable returnerar den här cmdleten ett Hashtable--objekt.

Kommentarer

PowerShell innehåller följande alias för Group-Object:

  • Alla plattformar:
    • group

Du kan använda parametern GroupBy för formaterings-cmdletar, till exempel Format-Table och Format-List, för att gruppera objekt. Till skillnad från Group-Object, som skapar en enskild tabell med en rad för varje egenskapsvärde, skapar parametrarna GroupBy en tabell för varje egenskapsvärde med en rad för varje objekt som har egenskapsvärdet.

Group-Object kräver inte att objekten som grupperas är av samma Microsoft .NET-typ. När du grupperar objekt av olika .NET-typer använder Group-Object följande regler:

  • Samma egenskapsnamn och typer.

    Om objekten har en egenskap med det angivna namnet och egenskapsvärdena har samma .NET-typ grupperas egenskapsvärdena efter samma regler som används för objekt av samma typ.

  • Samma egenskapsnamn, olika typer.

    Om objekten har en egenskap med det angivna namnet, men egenskapsvärdena har en annan .NET-typ i olika objekt, använder Group-Object .NET-typen för den första förekomsten av egenskapen som .NET-typ för den egenskapsgruppen. När ett objekt har en egenskap med en annan typ konverteras egenskapsvärdet till typen för den gruppen. Om typkonverteringen misslyckas ingår inte objektet i gruppen.

  • Egenskaper saknas.

    Objekt som inte har en angiven egenskap kan inte grupperas. Objekt som inte är grupperade visas i den sista GroupInfo objektutdata i en grupp med namnet AutomationNull.Value.

Utdata sorteras i stigande ordning efter gruppnamnen. Objekten som hör till varje grupp sorteras inte. De visas i den ordning de togs emot.