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

Sintassi

Group-Object [-AsHashTable] [-AsString] [[-Property] <Object[]>] [-CaseSensitive] [-Culture <string>] [-InputObject <psobject>] [-NoElement] [<CommonParameters>]

Descrizione

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

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

Parametri

-AsHashTable

Restituisce il gruppo come tabella hash. Le chiavi della tabella hash sono i valori della proprietà in base a cui vengono raggruppati gli oggetti. I valori della tabella hash sono gli oggetti che dispongono di tale valore di proprietà.

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

Obbligatorio?

false

Posizione?

named

Valore predefinito

GroupInfo object

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-AsString

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 utilizzato con il parametro AsHashTable.

Obbligatorio?

false

Posizione?

named

Valore predefinito

GroupInfo objects

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-CaseSensitive

Con questo parametro, nel raggruppamento viene rilevata la distinzione tra maiuscole e minuscole. Senza questo parametro, invece, i valori delle proprietà degli oggetti di un gruppo possono presentare differenze nelle lettere maiuscole e minuscole.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-Culture <string>

Specifica le impostazioni cultura da utilizzare nel confronto tra stringhe.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-InputObject <psobject>

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

Quando si utilizza il parametro InputObject per inviare una raccolta di oggetti a Group-Object, Group-Object riceve un oggetto che rappresenta la raccolta. Di conseguenza, viene creato un solo gruppo con tale oggetto come membro.

Per raggruppare gli oggetti in una raccolta, reindirizzarli a Group-Object.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

true (ByValue)

Accettare caratteri jolly?

false

-NoElement

Omette i membri di un gruppo dai risultati.

Obbligatorio?

false

Posizione?

named

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

-Property <Object[]>

Specifica le proprietà per il raggruppamento. Gli oggetti verranno 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.

Obbligatorio?

false

Posizione?

1

Valore predefinito

Accettare input da pipeline?

false

Accettare caratteri jolly?

false

<CommonParameters>

Questo cmdlet supporta i parametri comuni -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer e -OutVariable. Per ulteriori informazioni, vedere about_Commonparameters.

Input e output

Il tipo di input è il tipo degli oggetti che è possibile reindirizzare al cmdlet. Il tipo restituito è il tipo degli oggetti restituiti dal cmdlet.

Input

System.Management.Automation.PSObject

È possibile reindirizzare qualsiasi oggetto a Group-Object.

Output

Microsoft.PowerShell.Commands.GroupInfo o 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 [m2] e Format-List [m2]) per raggruppare oggetti. A differenza di Group-Object, che crea una sola tabella con una riga per ogni valore di proprietà, i parametri GroupBy creano una tabella per ogni valore di proprietà con una riga per ciascun elemento che dispone del valore della proprietà.

Per Group-Object non è necessario che gli oggetti raggruppati appartengano allo stesso tipo Microsoft .NET Framework. Per il raggruppamento di oggetti di tipi .NET Framework diversi, il cmdlet Group-Object utilizza le regole seguenti:

-- Stessi tipi e nomi di proprietà: se gli oggetti hanno una proprietà con il nome specificato e i valori della proprietà appartengono allo stesso tipo .NET Framework, i valori della proprietà vengono raggruppati mediante le stesse regole che verrebbero utilizzate per oggetti dello stesso tipo.

-- Stessi nomi di proprietà, tipi diversi: se gli oggetti hanno una proprietà con il nome specificato, ma i valori della proprietà appartengono a un tipo .NET Framework diverso in oggetti diversi, in Group-Object viene utilizzato 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 in quello per tale gruppo. Se la conversione del tipo non riesce, l'oggetto non viene incluso nel gruppo.

-- Proprietà mancanti: gli oggetti per i quali non è disponibile una proprietà specificata vengono considerati non raggruppabili e inclusi nell'output finale dell'oggetto GroupInfo in un gruppo denominato AutomationNull.Value.

Esempio 1

C:\PS>get-childitem *.doc | group-object -property length

Descrizione
-----------
Questo comando ottiene i file nel percorso corrente con estensione doc e li raggruppa in base alle dimensioni.






Esempio 2

C:\PS>get-childitem | sort-object -property extension | group-object -property extension

Descrizione
-----------
Questo comando ottiene i file nel percorso corrente, li ordina in base all'estensione di file, quindi li raggruppa in base all'estensione di file. Si noti che i file vengono ordinati prima di essere raggruppati.






Esempio 3

C:\PS>1..35 | group-object -property {$_ % 2},{$_ % 3}

Descrizione
-----------
In questo esempio viene illustrato come utilizzare i blocchi di script come valore del parametro Property. 

Con questo comando vengono visualizzati i valori interi da 1 a 35, raggruppati in base al resto della divisione per 2 o 3.






Esempio 4

C:\PS>$events = get-eventlog -logname system -newest 1000 

C:\PS> $events | group-object -property eventID 

Count Name                      Group
----- ----                      -----
   44 Information               {System.Diagnostics.EventLogEntry,
    5 Error                     {System.Diagnostics.EventLogEntry,
    1 Warning                   {System.Diagnostics.EventLogEntry}

Descrizione
-----------
Con questi comandi vengono visualizzate le 1000 voci più recenti nel registro eventi di sistema, raggruppate in base all'ID evento. 

Nel primo comando viene utilizzato il cmdlet Get-EventLog per recuperare gli eventi e l'operatore di assegnazione (=) per salvarli nella variabile $events. 

Nel secondo comando viene utilizzato un operatore pipeline (|) per inviare gli eventi nella variabile $events al cmdlet Group-Object. Viene utilizzato il parametro Property per specificare che gli eventi devono essere raggruppati in base al valore della relativa proprietà EventID. 

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






Esempio 5

C:\PS>get-process | group-object -property priorityclass

Count Name                Group
----- ----                -----
   55 Normal              {System.Diagnostics.Process (AdtAgent), System.Diagnostics.Process (alg), System.Dia...
    1                     {System.Diagnostics.Process (Idle)}
    3 High                {System.Diagnostics.Process (Newproc), System.Diagnostics.Process (winlogon), System.D... 
    2 BelowNormal         {System.Diagnostics.Process (winperf),  


C:\PS>get-process | group-object -property company -noelement
Count Name
----- ----
   55 Normal
    1
    3 High
    2 BelowNormal

Descrizione
-----------
In questo esempio viene illustrato l'effetto del parametro NoElement. Con questi comandi i processi nel computer vengono raggruppati per classe di priorità.

Nel primo comando viene utilizzato il cmdlet Get-Process per ottenere i processi disponibili nel computer. Viene utilizzato 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, a eccezione del fatto che utilizza il parametro NoElement per eliminare i membri del gruppo dall'output. Il risultato è una tabella che contiene solo il conteggio e il nome del valore della proprietà.

I risultati vengono illustrati nell'esempio di output seguente.






Esempio 6

C:\PS>get-eventlog -logname system -newest 1000 | group-object -property {$_.TimeWritten - $_.TimeGenerated}

Descrizione
-----------
Con questo comando viene illustrato come specificare un blocco di script come valore del parametro Property.

Tramite questo comando verranno visualizzate le 1000 voci più recenti del registro eventi di sistema, raggruppate in base all'ora compresa tra il momento in cui sono state generate e quello in cui sono state scritte nel registro. 

Nel comando viene utilizzato il cmdlet Get-EventLog per ottenere le voci del registro eventi. Viene utilizzato un operatore pipeline (|) per inviare le voci al cmdlet Group-Object. Il valore del parametro Property verrà specificato come blocco di script, ovvero espressione tra parentesi graffe. Il risultato della valutazione del blocco di script sarà costituito dall'ora compresa tra il momento in cui la voce di registro è stata generata e quello in cui è stata scritta nel registro. Tale valore verrà utilizzato per raggruppare i 1000 eventi più recenti.






Esempio 7

C:\PS>get-childitem | group-object extension -noelement 

Count Name
----- ----
   21
   82 .txt
    9 .cmd
    5 .log
   12 .xml
    5 .htm
   36 .ps1
    1 .psc1
    3 .exe
    6 .csv
    1 .psd1
    2 .bat

Descrizione
-----------
Con questo comando gli elementi nella directory corrente vengono raggruppati in base all'estensione di file. Viene utilizzato il parametro NoElement per omettere i membri del gruppo.

I risultati vengono illustrati nell'esempio di output seguente.






Esempio 8

C:\PS>"a", "b", "c", "c", "d" | get-unique

a
b
c
d

C:\PS> "a", "b", "c", "c", "d" | group-object -noelement | where {$_.Count -gt 1}
Count Name
----- ----
    2 c

C:\PS> get-process | group-object -property Name -noelement | where {$_.count -gt 1}
Count Name
----- ----
    2 csrss
    5 svchost
    2 winlogon
    2 wmiprvse

Descrizione
-----------
In questo esempio viene illustrato come trovare i valori delle proprietà univoci e non (ripetuti) in una raccolta. 

Il primo comando ottiene gli elementi univoci di una matrice reindirizzando la matrice al cmdlet Get-Unique.

Il secondo comando ottiene gli elementi non univoci di una matrice. La matrice viene reindirizzata al cmdlet Group-Object che raggruppa gli oggetti in base al valore. I gruppi risultanti vengono reindirizzati al cmdlet Where-Object che seleziona gli oggetti con gruppi con più di un membro.

Nel terzo comando viene illustrato l'utilizzo pratico di questa tecnica. Per rilevare processi nel computer con lo stesso nome di processo, viene utilizzato lo stesso metodo.

I risultati vengono illustrati nell'esempio di output seguente.






Esempio 9

C:\PS>$a = get-command get-*, set-* -type cmdlet | group-object -property verb -ashashtable -asstring

C:\PS> $a 

Name    Value
----    -----
Get     {Get-PSCallStack, Get-PSBreakpoint, Get-PSDrive, Get-PSSession...}
Set     {Set-Service, Set-StrictMode, Set-PSDebug, Set-PSSessionConfiguration...}

C:\PS> $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...
...

Descrizione
-----------
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, ciascun valore della proprietà è una chiave e gli elementi del gruppo sono i valori. Poiché ciascuna chiave è una proprietà dell'oggetto tabella hash, è possibile utilizzare la notazione con punto per visualizzare i valori.

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

Con il secondo comando viene visualizzata la tabella hash in $a. Sono presenti due coppie chiave-valore, una per i cmdlet Get e l'altra per i cmdlet Set.

Nel terzo comando viene utilizzata la notazione con punto per visualizzare i valori della chiave Get in $a. I valori sono l'oggetto CmdletInfo. Il parametro AsString non converte gli oggetti dei gruppi in stringhe.









Argomenti della Guida