Group-Object

Seskupí objekty, které obsahují stejnou hodnotu pro zadané vlastnosti.

Syntaxe

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

Description

Rutina Group-Object zobrazí objekty ve skupinách na základě hodnoty zadané vlastnosti. Group-Object vrátí tabulku s jedním řádkem pro každou hodnotu vlastnosti a sloupec, který zobrazuje počet položek s danou hodnotou.

Pokud zadáte více než jednu vlastnost, Group-Object nejprve je seskupí podle hodnot první vlastnosti a pak v rámci každé skupiny vlastností seskupí podle hodnoty další vlastnosti.

Počínaje PowerShellem 7 Group-Object můžete zkombinovat parametry CaseSensitive a AsHashtable a vytvořit tabulku hash rozlišující malá a velká písmena. Klíče tabulky hash používají porovnání s rozlišováním velkých a malých písmen a výstupem objektu System.Collections.Hashtable .

Příklady

Příklad 1: Seskupení souborů podle přípony

Tento příklad rekurzivně získá soubory pod $PSHOME a seskupí je podle přípony názvu souboru. Výstup se odešle do Sort-Object rutiny, která je seřadí podle souborů počtu nalezených pro dané rozšíření. Prázdný název představuje adresáře.

Tento příklad používá parametr NoElement k vynechání členů skupiny.

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

Příklad 2: Seskupení celých čísel podle pravděpodobnosti a sudých

Tento příklad ukazuje, jak používat bloky skriptu jako hodnotu parametru Property . Tento příkaz zobrazí celá čísla od 1 do 20 seskupených podle pravděpodobnosti a dokonce i.

1..20 | Group-Object -Property {$_ % 2}

Count Name                      Group
----- ----                      -----
   10 0                         {2, 4, 6, 8...}
   10 1                         {1, 3, 5, 7...}

Příklad 3: Seskupení hashtables podle hodnoty klíče

Počínaje PowerShellem 6 Group-Object podporuje řazení hodnot hashtable podle hodnot klíčů. Následující příklad seskupí pole hashtable podle hodnoty klíče hashtable weight .

Tento příklad používá parametr NoElement k vynechání členů skupiny.

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

Příklad 4: Seskupení událostí protokolu událostí podle EntryType

Tento příklad zobrazí 1 000 nejnovějších položek v protokolu událostí systému seskupené podle EntryType.

Ve výstupu sloupec Počet představuje počet položek v každé skupině. Sloupec Název představuje hodnoty EventType , které definují skupinu. Sloupec Group představuje objekty v každé skupině.

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

Příklad 5: Seskupení procesů podle třídy priority

Tento příklad ukazuje účinek parametru NoElement . Tyto příkazy seskupují procesy v počítači podle třídy priority.

První příkaz pomocí rutiny Get-Process získá procesy v počítači a odešle objekty dolů kanálu. Group-Objectseskupí objekty podle hodnoty PriorityClass vlastnost procesu.

Druhý příklad používá parametr NoElement k odebrání členů skupiny z výstupu. Výsledkem je tabulka s hodnotou vlastnosti Count a Name .

Výsledky se zobrazí v následujícím ukázkovém výstupu.

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

Příklad 6: Seskupení procesů podle názvu

Následující příklad používá Group-Object k seskupení více instancí procesů spuštěných v místním počítači. Where-Object zobrazí procesy s více než jednou instancí.

Get-Process | Group-Object -Property Name -NoElement | Where-Object {$_.Count -gt 1}

Count Name
----- ----
2     csrss
5     svchost
2     winlogon
2     wmiprvse

Příklad 7: Seskupení objektů v tabulce hash

Tento příklad používá parametry AsHashTable a AsString k vrácení skupin v tabulce hash jako kolekce párů klíč-hodnota.

Ve výsledné tabulce hash je každá hodnota vlastnosti klíčem a prvky skupiny jsou hodnoty. Vzhledem k tomu, že každý klíč je vlastností objektu tabulky hash, můžete k zobrazení hodnot použít tečku.

První příkaz získá Get rutiny a Set rutiny v relaci, seskupí je slovesem, vrátí skupiny jako hashovací tabulku a uloží tabulku hash do $A proměnné.

Druhý příkaz zobrazí tabulku hash v $Asouboru . Existují dva páry klíč-hodnota, jeden pro Get rutiny a jeden pro Set rutiny.

Třetí příkaz používá zápis tečky k $A.Get zobrazení hodnot klíče Get in $A. Hodnoty jsou RutinInfo objekt. Parametr AsString nepřevádí objekty ve skupinách na řetězce.

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

Příklad 8: Vytvoření tabulky hash rozlišující malá a velká písmena

Tento příklad kombinuje parametry CaseSensitive a AsHashTable k vytvoření tabulky hash rozlišujících malá a velká písmena. Soubory v příkladu mají přípony .txt a .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}

Proměnná $hash ukládá objekt System.Collections.Hashtable . Get-ChildItem získá názvy souborů z C:\Files adresáře a odešle System.IO.FileInfo objekty dolů kanálu. Group-Objectseskupí objekty pomocí rozšíření hodnoty vlastnosti. Parametry CaseSensitive a AsHashTable vytvářejí tabulku hash a klíče jsou seskupeny pomocí klíčů .txt rozlišujících malá a velká písmena a .TXT.

Parametry

-AsHashTable

Označuje, že tato rutina vrátí skupinu jako tabulku hash. Klíče tabulky hash jsou hodnoty vlastností, podle kterých jsou objekty seskupené. Hodnoty tabulky hash jsou objekty, které mají danou hodnotu vlastnosti.

Samotný parametr AsHashTable vrátí každou tabulku hash, ve které je každý klíč instancí seskupených objektů. Při použití s parametrem AsString jsou klíče v tabulce hash řetězce.

Počínaje PowerShellem 7 vytvořte tabulky hash s rozlišováním malých a velkých písmen, do příkazu zahrňte caseSensitive a AsHashtable .

Typ:SwitchParameter
Aliasy:AHT
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-AsString

Označuje, že tato rutina převádí klíče tabulky hash na řetězce. Ve výchozím nastavení jsou klíče tabulky hash instance seskupených objektů. Tento parametr je platný pouze při použití s parametrem AsHashTable .

Typ:SwitchParameter
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-CaseSensitive

Označuje, že tato rutina rozlišují malá a velká písmena. Bez tohoto parametru můžou mít hodnoty vlastností objektů ve skupině různé případy.

Počínaje PowerShellem 7 vytvořte tabulky hash s rozlišováním malých a velkých písmen, do příkazu zahrňte caseSensitive a AsHashtable .

Typ:SwitchParameter
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Culture

Určuje jazykovou verzi, která se má použít při porovnávání řetězců.

Typ:String
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-InputObject

Určuje objekty, které se mají seskupit. Zadejte proměnnou, která obsahuje objekty, nebo zadejte příkaz nebo výraz, který objekty získá.

Při použití InputObject parametru odeslat kolekci objektů do Group-Object, Group-Object obdrží jeden objekt, který představuje kolekci. V důsledku toho vytvoří jednu skupinu s tímto objektem jako jejím členem.

Chcete-li seskupit objekty v kolekci, nasměrujte objekty na Group-Object.

Typ:PSObject
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-NoElement

Označuje, že tato rutina vynechá členy skupiny z výsledků.

Typ:SwitchParameter
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Property

Určuje vlastnosti pro seskupování. Objekty jsou uspořádány do pojmenovaných skupin na základě hodnoty zadaných vlastností. Pokud není zadána žádná vlastnost, objekty jsou seskupeny podle jejich hodnoty nebo ToString() reprezentace jejich hodnoty. Výstup se seřadí vzestupně podle názvů skupin.

Hodnota parametru Property může být nová počítaná vlastnost. Počítaná vlastnost může být blok skriptu nebo tabulka hash. Platné páry klíč-hodnota jsou:

  • Výraz – <string> nebo <script block>

Další informace najdete v tématu about_Calculated_Properties.

Typ:Object[]
Position:0
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

Vstupy

PSObject

Do této rutiny můžete převést libovolný objekt.

Výstupy

GroupInfo

Ve výchozím nastavení vrátí tato rutina objekt GroupInfo .

Hashtable

Pokud použijete parametr AsHashTable , vrátí tato rutina objekt Hashtable .

Poznámky

PowerShell obsahuje následující aliasy pro Group-Object:

  • Všechny platformy:
    • group

K seskupení objektů můžete použít parametr GroupBy rutin formátování, například Format-Table a Format-List. Na rozdíl od Group-Objecttabulky, která vytvoří jednu tabulku s řádkem pro každou hodnotu vlastnosti, vytvoří parametry GroupBy tabulku pro každou hodnotu vlastnosti s řádkem pro každou položku, která má hodnotu vlastnosti.

Group-Object nevyžaduje, aby se seskupené objekty byly stejného typu Microsoft .NET. Při seskupování objektů různých typů Group-Object .NET se používají následující pravidla:

  • Stejné názvy a typy vlastností.

    Pokud mají objekty vlastnost se zadaným názvem a hodnoty vlastností mají stejný typ .NET, hodnoty vlastností jsou seskupeny stejnými pravidly, která by byla použita pro objekty stejného typu.

  • Stejné názvy vlastností, různé typy.

    Pokud objekty mají vlastnost se zadaným názvem, ale hodnoty vlastností mají jiný typ .NET v různých objektech, Group-Object použije typ .NET prvního výskytu vlastnosti jako typ .NET pro danou skupinu vlastností. Pokud má objekt vlastnost s jiným typem, hodnota vlastnosti je převedena na typ pro tuto skupinu. Pokud převod typu selže, objekt není součástí skupiny.

  • Chybí vlastnosti.

    Objekty, které nemají zadanou vlastnost, nelze seskupit. Objekty, které nejsou seskupené, se zobrazí v konečném výstupu GroupInfo objektu ve skupině s názvem AutomationNull.Value.

Výstup se seřadí vzestupně podle názvů skupin. Položky patřící do každé skupiny nejsou seřazené. Jsou uvedeny v pořadí, ve kterém byly přijaty.