Group-Object
Raggruppa oggetti che contengono lo stesso valore per le proprietà specificate.
Sintassi
Group-Object
[-NoElement]
[-AsHashTable]
[-AsString]
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Descrizione
Il Group-Object
cmdlet 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 le raggruppa in base ai valori della prima proprietà e quindi, all'interno di ogni gruppo di proprietà, raggruppa in base al valore della proprietà successiva.
A partire da PowerShell 7, Group-Object
può combinare i parametri CaseSensitive e AsHashtable per creare una tabella hash con distinzione tra maiuscole e minuscole. Le chiavi della tabella hash usano confronti con distinzione tra maiuscole e minuscole e generano un oggetto System.Collections.Hashtable .
Esempio
Esempio 1: Raggruppare i file per estensione
Questo esempio ottiene in modo ricorsivo i file in $PSHOME
e li raggruppa in base all'estensione del nome file. L'output viene inviato al Sort-Object
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 blocchi di script come valore del parametro Property . 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 0 {2, 4, 6, 8...}
10 1 {1, 3, 5, 7...}
Esempio 3: Raggruppare tabelle hash in base al valore della chiave
A partire da PowerShell 6, Group-Object
supporta l'ordinamento dell'input della tabella hash in base ai valori chiave.
Nell'esempio seguente viene raggruppata una matrice di tabelle hash in base al valore della chiave di weight
ogni tabella hash.
In questo esempio viene utilizzato il parametro NoElement per omettere i membri del gruppo.
@(
@{ 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
Esempio 4: Raggruppare gli eventi del registro eventi per EntryType
In questo esempio vengono visualizzate le 1.000 voci più recenti nel registro eventi di sistema, raggruppate in base a 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. 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.Diag...}
722 Information {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diag...}
125 Warning {System.Diagnostics.Eventing.Reader.EventLogRecord, System.Diag...}
Esempio 5: 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 di priorità.
Il primo comando usa il Get-Process
cmdlet per ottenere i processi nel computer e invia gli oggetti nella pipeline. Group-Object
raggruppa gli oggetti in base al valore della proprietà PriorityClass del processo.
Il secondo esempio usa il parametro NoElement per rimuovere i membri del gruppo dall'output. Il risultato è una tabella con solo il valore della proprietà Count e Name .
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 6: Raggruppare i processi in base al nome
Nell'esempio seguente viene Group-Object
usato per raggruppare più istanze di processi in esecuzione nel computer locale. Where-Object
visualizza i processi con più di un'istanza.
Get-Process | Group-Object -Property Name -NoElement | Where-Object {$_.Count -gt 1}
Count Name
----- ----
2 csrss
5 svchost
2 winlogon
2 wmiprvse
Esempio 7: Raggruppare oggetti in una tabella hash
In questo esempio vengono usati i parametri AsHashTable e AsString per restituire i gruppi in una tabella hash, come raccolta di coppie chiave-valore.
Nella tabella hash risultante ogni valore di proprietà è una chiave e gli elementi del gruppo sono i valori. Siccome ogni chiave è una proprietà dell'oggetto tabella hash, per la visualizzazione dei valori è possibile usare la notazione del punto.
Il primo comando ottiene i Get
cmdlet e Set
nella sessione, li raggruppa per verbo, restituisce i gruppi come tabella hash e salva la tabella hash nella $A
variabile.
Il secondo comando visualizza la tabella hash in $A
. Esistono due coppie chiave-valore, una per i Get
cmdlet e una per i Set
cmdlet.
Il terzo comando usa la notazione punto per $A.Get
visualizzare i valori della chiave Get in $A
. I valori sono l'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-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
...
Esempio 8: Creare una tabella hash con distinzione tra maiuscole e minuscole
In questo esempio vengono combinati i parametri CaseSensitive e AsHashTable per creare una tabella hash con distinzione tra maiuscole e minuscole. I file nell'esempio hanno estensioni di .txt
e .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}
La $hash
variabile archivia l'oggetto System.Collections.Hashtable . Get-ChildItem
ottiene i nomi di file dalla C:\Files
directory e invia gli oggetti System.IO.FileInfo nella pipeline. Group-Object
raggruppa gli oggetti usando l'estensione del valore della proprietà. I parametri CaseSensitive e AsHashTable creano la tabella hash e le chiavi vengono raggruppate usando le chiavi .txt
con distinzione tra maiuscole e minuscole e .TXT
.
Parametri
-AsHashTable
Indica che questo cmdlet restituisce il gruppo come tabella hash. Le chiavi della tabella hash sono i valori di proprietà in base ai quali vengono raggruppati gli oggetti. I valori della tabella hash sono gli oggetti che presentano quello specifico valore di 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.
A partire da PowerShell 7, per creare tabelle hash con distinzione tra maiuscole e minuscole, includere CaseSensitive e AsHashtable nel comando.
Tipo: | SwitchParameter |
Alias: | AHT |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | 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 .
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-CaseSensitive
Indica che questo cmdlet fa distinzione tra maiuscole e minuscole per il raggruppamento. Senza questo parametro, i valori di proprietà degli oggetti in un gruppo non rileverebbero differenze tra lettere maiuscole e minuscole.
A partire da PowerShell 7, per creare tabelle hash con distinzione tra maiuscole e minuscole, includere CaseSensitive e AsHashtable nel comando.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Culture
Specifica le impostazioni cultura da usare per il confronto di stringhe.
Tipo: | String |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-InputObject
Specifica gli oggetti da raggruppare. Immettere una variabile che contiene 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 la raccolta. Di conseguenza, viene creato un singolo gruppo con tale oggetto come membro.
Per raggruppare gli oggetti in una raccolta, inviare tramite pipe gli oggetti a Group-Object
.
Tipo: | PSObject |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-NoElement
Indica che questo cmdlet omette i membri di un gruppo dai risultati.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Property
Specifica le proprietà per il raggruppamento. Gli oggetti vengono disposti in gruppi denominati in base al valore delle proprietà specificate. Quando non viene specificata alcuna proprietà, gli oggetti vengono raggruppati in base al valore o alla ToString()
rappresentazione del relativo valore. L'output viene ordinato in ordine crescente in base ai nomi dei gruppi.
Il valore del parametro Property può essere una nuova proprietà calcolata. La proprietà calcolata può essere un blocco di script o una tabella hash. Le coppie chiave-valore valide sono:
- Espressione -
<string>
o<script block>
Per altre informazioni, vedere about_Calculated_Properties.
Tipo: | Object[] |
Posizione: | 0 |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
Input
È possibile inviare tramite pipe qualsiasi oggetto a questo cmdlet.
Output
Per impostazione predefinita, questo cmdlet restituisce un oggetto GroupInfo .
Quando si usa il parametro AsHashTable , questo cmdlet restituisce un oggetto Hashtable .
Note
PowerShell include gli alias seguenti per Group-Object
:
- Tutte le piattaforme:
group
È possibile usare 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 Microsoft .NET.
Quando si raggruppano oggetti di tipi .NET diversi, Group-Object
vengono usate le regole seguenti:
Stessi nomi e tipi di proprietà.
Se gli oggetti hanno una proprietà con il nome specificato e i valori della proprietà hanno lo stesso tipo .NET, i valori delle proprietà vengono raggruppati in base alle stesse regole che verrebbero usate 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 diverso in oggetti diversi,
Group-Object
usa il tipo .NET della prima occorrenza della proprietà come tipo .NET per tale gruppo di proprietà. Quando un oggetto ha una proprietà con un tipo diverso, il valore di proprietà viene convertito nel tipo per tale gruppo. Se la conversione del tipo non riesce, l'oggetto non è incluso nel gruppo.Proprietà mancanti.
Gli oggetti che non dispongono di una proprietà specificata non possono essere raggruppati. Gli oggetti non raggruppati vengono visualizzati nell'output dell'oggetto GroupInfo finale in un gruppo denominato
AutomationNull.Value
.
L'output viene ordinato in ordine crescente in base ai nomi dei gruppi. Gli elementi appartenenti a ogni gruppo non sono ordinati. Sono elencati nell'ordine in cui sono stati ricevuti.