Condividi tramite


Group-Object

Raggruppa gli oggetti che contengono lo stesso valore per le proprietà specificate.

Sintassi

Default (Impostazione predefinita)

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

Descrizione

Il cmdlet Group-Object visualizza gli oggetti in gruppi in base al valore di una proprietà specificata. Group-Object restituisce una tabella con una riga per ogni valore della proprietà e una colonna che visualizza il numero di elementi con tale valore.

Se si specificano più proprietà, Group-Object prima raggrupparle in base ai valori della prima proprietà e quindi, all'interno di ogni gruppo di proprietà, raggruppa in base al valore della proprietà successiva.

Esempio

Esempio 1: Raggruppare i file per estensione

In questo esempio vengono recuperati in modo ricorsivo i file e $PSHOME li raggruppa in base all'estensione del nome file. L'output Sort-Object viene inviato al cmdlet che li ordina in base ai file di conteggio trovati per l'estensione specificata. Il nome vuoto rappresenta le directory.

In questo esempio viene utilizzato il parametro NoElement per omettere i membri del gruppo.

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

Esempio 2: Raggruppare numeri interi per probabilità e pari

In questo esempio viene illustrato come usare i blocchi di script come valore del parametro proprietà.

Questo comando visualizza i numeri interi da 1 a 20, raggruppati per probabilità e anche.

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}

Esempio 3: Raggruppare gli eventi del registro eventi per EntryType

Questi comandi visualizzano le 1.000 voci più recenti nel registro eventi di sistema, raggruppate per EntryType.

Nell'output, la colonna Count rappresenta il numero di voci in ogni gruppo, la colonna Name rappresenta i valori EventType che definiscono un gruppo e la colonna Group rappresenta gli oggetti in ogni gruppo.

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

Esempio 4: Raggruppare i processi per classe di priorità

In questo esempio viene illustrato l'effetto del parametro NoElement. Questi comandi raggruppano i processi nel computer in base alla classe priority.

Il primo comando utilizza il Get-Process cmdlet per ottenere i processi nel computer. Utilizza un operatore | pipeline per inviare i risultati a Group-Object, che raggruppa gli oggetti in base al valore della proprietà PriorityClass del processo.

Il secondo comando è identico al primo, ad eccezione del fatto che utilizza il parametro NoElement per eliminare i membri del gruppo dall'output. Il risultato è una tabella con solo il nome del conteggio e del valore della proprietà.

I risultati sono visualizzati nell'output di esempio seguente.

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

Esempio 5: Raggruppare i processi in base al nome

Nell'esempio seguente vengono utilizzate Group-Object più istanze di processi in esecuzione nel computer locale.

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

Esempio 8: Raggruppare oggetti in una tabella hash

In questo esempio vengono utilizzati i parametri AsHashTable e AsString per restituire i gruppi in una tabella hash, ovvero come raccolta di coppie chiave-valore.

Nella tabella hash risultante, ogni valore della proprietà è una chiave e gli elementi del gruppo sono i valori. Poiché ogni chiave è una proprietà dell'oggetto tabella hash, è possibile usare la notazione punto per visualizzare i valori.

Il primo comando ottiene i cmdlet Get e Set nella sessione, li raggruppa per verbo, restituisce i gruppi come tabella hash e salva la tabella hash nella variabile $A.

Il secondo comando visualizza la tabella hash in $A. Esistono due coppie chiave-valore, una per i cmdlet Get e una per i cmdlet Set.

Il terzo comando utilizza la notazione del punto per visualizzare i valori del tasto Get in $A. I valori sono 'oggetto CmdletInfo. Il parametro AsString non converte gli oggetti nei gruppi in stringhe.

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

Parametri

-AsHashTable

Indica che questo cmdlet restituisce il gruppo come tabella hash. Le chiavi della tabella hash sono i valori delle proprietà in base ai quali gli oggetti sono raggruppati. I valori della tabella hash sono gli oggetti con tale valore della proprietà.

Da solo, il parametro AsHashTable restituisce ogni tabella hash in cui ogni chiave è un'istanza dell'oggetto raggruppato. Se usato con il parametro AsString, le chiavi nella tabella hash sono stringhe.

Proprietà dei parametri

Tipo:SwitchParameter
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False
Alias:AHT

Set di parametri

(All)
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-AsString

Indica che questo cmdlet converte le chiavi della tabella hash in stringhe. Per impostazione predefinita, le chiavi della tabella hash sono istanze dell'oggetto raggruppato. Questo parametro è valido solo se usato con il parametro AsHashTable.

Proprietà dei parametri

Tipo:SwitchParameter
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

(All)
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-CaseSensitive

Indica che questo cmdlet fa distinzione tra maiuscole e minuscole per il raggruppamento. Senza questo parametro, i valori delle proprietà degli oggetti in un gruppo potrebbero avere casi diversi.

Proprietà dei parametri

Tipo:SwitchParameter
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

(All)
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-Culture

Specifica le impostazioni cultura da utilizzare durante il confronto delle stringhe.

Proprietà dei parametri

Tipo:String
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

(All)
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-InputObject

Specifica gli oggetti da raggruppare. Immettere una variabile contenente gli oggetti oppure digitare un comando o un'espressione che ottiene gli oggetti .

Quando si utilizza il parametro InputObject per inviare una raccolta di oggetti a Group-Object, Group-Object riceve un oggetto che rappresenta l'insieme. Di conseguenza, crea un singolo gruppo con tale oggetto come membro.

Per raggruppare gli oggetti in un insieme, inviare tramite pipe gli oggetti a Group-Object.

Proprietà dei parametri

Tipo:PSObject
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

(All)
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:True
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-NoElement

Indica che questo cmdlet omette i membri di un gruppo dai risultati.

Proprietà dei parametri

Tipo:SwitchParameter
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

(All)
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-Property

Specifica le proprietà per il raggruppamento. Gli oggetti sono disposti in gruppi in base al valore della proprietà specificata.

Il valore del parametro Property può essere una nuova proprietà calcolata. Per creare una proprietà calcolata, creare una tabella hash con una chiave Expression che specifica un valore di stringa o di blocco di script.

Proprietà dei parametri

Tipo:

Object[]

Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

(All)
Posizione:0
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

CommonParameters

Questo cmdlet supporta i parametri comuni: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Per altre informazioni, vedi about_CommonParameters.

Input

PSObject

È possibile reindirizzare qualsiasi oggetto a Group-Object.

Output

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

Quando si utilizza il parametro AsHashTable , Group-Object restituisce una tabella hash. In caso contrario, restituisce un oggetto GroupInfo .

Note

  • È inoltre possibile utilizzare il parametro GroupBy dei cmdlet di formattazione (ad esempio Format-Table e Format-List) per raggruppare gli oggetti. A differenza di Group-Object, che crea una singola tabella con una riga per ogni valore della proprietà, i parametri GroupBy creano una tabella per ogni valore della proprietà con una riga per ogni elemento con il valore della proprietà .

    Group-Object non richiede che gli oggetti raggruppati siano dello stesso tipo di Microsoft .NET Framework. Quando si raggruppano oggetti di diversi tipi di .NET Framework, Group-Object vengono utilizzate le regole seguenti:

    • Stessi nomi e tipi di proprietà. Se gli oggetti dispongono di una proprietà con il nome specificato e i valori delle proprietà hanno lo stesso tipo di .NET Framework, i valori delle proprietà vengono raggruppati utilizzando le stesse regole che verrebbero utilizzate per gli oggetti dello stesso tipo.

    • Stessi nomi di proprietà, tipi diversi. Se gli oggetti hanno una proprietà con il nome specificato, ma i valori delle proprietà hanno un tipo .NET Framework diverso in oggetti diversi, Group-Object utilizza il tipo .NET Framework della prima occorrenza della proprietà come tipo .NET Framework per tale gruppo di proprietà. Quando un oggetto ha una proprietà con un tipo diverso, il valore della proprietà viene convertito nel tipo per tale gruppo. Se la conversione del tipo non riesce, l'oggetto non viene incluso nel gruppo.

    • Proprietà mancanti. Gli oggetti che non dispongono di una proprietà specificata sono considerati non raggruppabili. Gli oggetti non raggruppabili vengono visualizzati nell'output finale dell'oggetto GroupInfo in un gruppo denominato AutomationNull.Value.