Sort-Object
Ordina gli oggetti in base ai valori delle proprietà.
Sintassi
Default (impostazione predefinita).
Sort-Object
[[-Property] <Object[]>]
[-Stable]
[-Descending]
[-Unique]
[-InputObject <PSObject>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Top
Sort-Object
[[-Property] <Object[]>]
-Top <Int32>
[-Descending]
[-Unique]
[-InputObject <PSObject>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Bottom
Sort-Object
[[-Property] <Object[]>]
-Bottom <Int32>
[-Descending]
[-Unique]
[-InputObject <PSObject>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Descrizione
Il Sort-Object cmdlet ordina gli oggetti in ordine crescente o decrescente in base ai valori delle proprietà dell'oggetto. Se le proprietà di ordinamento non sono incluse in un comando, PowerShell usa le proprietà di ordinamento predefinite del primo oggetto di input. Se il tipo dell'oggetto di input non ha proprietà di ordinamento predefinite, PowerShell tenta di confrontare gli oggetti stessi. Per ulteriori informazioni, vedere la sezione Note.
È possibile ordinare gli oggetti in base a una singola proprietà o a più proprietà. Più proprietà utilizzano le tabelle hash per ordinare in ordine crescente, decrescente o una combinazione di ordinamenti. Le proprietà vengono ordinate in base alla distinzione tra maiuscole e minuscole o senza distinzione tra maiuscole e minuscole. Usare il parametro Unique per rimuovere i duplicati dall'output.
Esempio
Esempio 1: Ordinare la directory corrente in base al nome
In questo esempio vengono ordinati i file e le sottodirectory in una directory.
Get-ChildItem -Path C:\Test | Sort-Object
Directory: C:\Test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2/13/2019 08:55 26 anotherfile.txt
-a---- 2/13/2019 13:26 20 Bfile.txt
-a---- 2/12/2019 15:40 118014 Command.txt
-a---- 2/1/2019 08:43 183 CreateTestFile.ps1
d----- 2/25/2019 18:25 Files
d----- 2/25/2019 18:24 Logs
-ar--- 2/12/2019 14:31 27 ReadOnlyFile.txt
-a---- 2/12/2019 16:24 23 Zsystemlog.log
Il Get-ChildItem cmdlet ottiene i file e le sottodirectory dalla directory specificata dal parametro Path , C:\Test. Gli oggetti vengono inviati alla pipeline al cmdlet Sort-Object.
Sort-Object non specifica una proprietà in modo che l'output venga ordinato in base alla proprietà di ordinamento predefinita Name.
Esempio 2: Ordinare la directory corrente in base alla lunghezza del file
Questo comando visualizza i file nella directory corrente in base alla lunghezza in ordine crescente.
Get-ChildItem -Path C:\Test -File | Sort-Object -Property Length
Directory: C:\Test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2/13/2019 13:26 20 Bfile.txt
-a---- 2/12/2019 16:24 23 Zsystemlog.log
-a---- 2/13/2019 08:55 26 anotherfile.txt
-ar--- 2/12/2019 14:31 27 ReadOnlyFile.txt
-a---- 2/1/2019 08:43 183 CreateTestFile.ps1
-a---- 2/12/2019 15:40 118014 Command.txt
Il Get-ChildItem cmdlet ottiene i file dalla directory specificata dal parametro Path .
Il parametro File consente di specificare che Get-ChildItem ottiene solo gli oggetti file. Gli oggetti vengono inviati alla pipeline al cmdlet Sort-Object.
Sort-Object utilizza il parametro Length per ordinare i file in base alla lunghezza in ordine crescente.
Esempio 3: Ordinare i processi in base all'utilizzo della memoria
In questo esempio vengono visualizzati i processi con l'utilizzo di memoria più elevato in base alle dimensioni del working set (WS).
Get-Process | Sort-Object -Property WS | Select-Object -Last 5
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
------ ----- ----- ------ -- -- -----------
136 193.92 217.11 889.16 87492 8 OUTLOOK
112 347.73 297.02 95.19 106908 8 Teams
206 266.54 323.71 37.17 60620 8 MicrosoftEdgeCP
35 552.19 549.94 131.66 6552 8 Code
0 1.43 595.12 0.00 2780 0 Memory Compression
Il Get-Process cmdlet ottiene l'elenco dei processi in esecuzione nel computer. Gli oggetti processo vengono inviati alla pipeline al cmdlet Sort-Object.
Sort-Objectutilizza il parametro Property per ordinare gli oggetti in base a WS. Gli oggetti vengono inviati alla pipeline al cmdlet Select-Object.
Select-Object utilizza il parametro Last per specificare gli ultimi cinque oggetti, ovvero gli oggetti con l'utilizzo WS più elevato.
In PowerShell 6 il Sort-Object parametro Bottom è un'alternativa a Select-Object. Ad esempio: Get-Process | Sort-Object -Property WS -Bottom 5.
Esempio 4: Ordinare gli oggetti HistoryInfo in base all'ID
Questo comando ordina gli oggetti HistoryInfo della sessione di PowerShell usando la proprietà Id . Ogni sessione di PowerShell ha una propria cronologia dei comandi.
Get-History | Sort-Object -Property Id -Descending
Id CommandLine
-- -----------
10 Get-Command Sort-Object -Syntax
9 $PSVersionTable
8 Get-Command Sort-Object -Syntax
7 Get-Command Sort-Object -ShowCommandInfo
6 Get-ChildItem -Path C:\Test | Sort-Object -Property Length
5 Get-Help Clear-History -Online
4 Get-Help Clear-History -Full
3 Get-ChildItem | Get-Member
2 Get-Command Sort-Object -Syntax
1 Set-Location C:\Test\
Il Get-History cmdlet ottiene gli oggetti della cronologia dalla sessione di PowerShell corrente. Gli oggetti vengono inviati alla pipeline al cmdlet Sort-Object.
Sort-Object utilizza il parametro Property per ordinare gli oggetti in base all'Id. Il parametro Descending ordina la cronologia dei comandi dal più recente al meno recente.
Esempio 5: Usare una tabella hash per ordinare le proprietà in ordine crescente e decrescente
In questo esempio vengono utilizzate due proprietà per ordinare gli oggetti , Status e DisplayName. Lo stato viene ordinato in ordine decrescente e DisplayName viene ordinato in ordine crescente.
Una tabella hash viene utilizzata per specificare il valore del parametro Property . La tabella hash utilizza un'espressione per specificare i nomi delle proprietà e gli ordinamenti. Per altre informazioni sulle tabelle hash, vedere about_Hash_Tables.
La proprietà Status utilizzata nella tabella hash è una proprietà enumerata. Per altre informazioni, vedere ServiceControllerStatus.
Get-Service |
Sort-Object -Property @{Expression = "Status"; Descending = $true},
@{Expression = "DisplayName"; Descending = $false}
Status Name DisplayName
------ ---- -----------
Running Appinfo Application Information
Running BthAvctpSvc AVCTP service
Running BrokerInfrastru... Background Tasks Infrastructure Ser...
Running BDESVC BitLocker Drive Encryption Service
Running CoreMessagingRe... CoreMessaging
Running VaultSvc Credential Manager
Running DsSvc Data Sharing Service
Running Dhcp DHCP Client
...
Stopped ALG Application Layer Gateway Service
Stopped AppMgmt Application Management
Stopped BITS Background Intelligent Transfer Ser...
Stopped wbengine Block Level Backup Engine Service
Stopped BluetoothUserSe... Bluetooth User Support Service_14fb...
Stopped COMSysApp COM+ System Application
Stopped smstsmgr ConfigMgr Task Sequence Agent
Stopped DeviceInstall Device Install Service
Stopped MSDTC Distributed Transaction Coordinator
Il Get-Service cmdlet ottiene l'elenco dei servizi nel computer. Gli oggetti servizio vengono inviati alla pipeline al cmdlet Sort-Object.
Sort-Object utilizza il parametro Property con una tabella hash per specificare i nomi delle proprietà e gli ordinamenti. Il parametro Property è ordinato in base a due proprietà, Status in ordine decrescente e DisplayName in ordine crescente.
Status è una proprietà enumerata.
Stopped ha un valore di 1 e Running ha un valore di 4. Il parametro Decrescente è impostato su $true in modo che i processi in esecuzione vengano visualizzati prima dei processi arrestati .
DisplayName imposta il parametro Descending su $false per ordinare i nomi visualizzati in ordine alfabetico.
Esempio 6: Ordinare i file di testo in base all'intervallo di tempo
Questo comando ordina i file di testo in ordine decrescente in base all'intervallo di tempo compreso tra CreationTime e LastWriteTime.
Get-ChildItem -Path C:\Test\*.txt |
Sort-Object -Property {$_.CreationTime - $_.LastWriteTime} |
Format-Table CreationTime, LastWriteTime, FullName
CreationTime LastWriteTime FullName
------------ ------------- --------
11/21/2018 12:39:01 2/26/2019 08:59:36 C:\Test\test2.txt
12/4/2018 08:29:41 2/26/2019 08:57:05 C:\Test\powershell_list.txt
2/20/2019 08:15:59 2/26/2019 12:09:43 C:\Test\CreateTestFile.txt
2/20/2019 08:15:59 2/26/2019 12:07:41 C:\Test\Command.txt
2/20/2019 08:15:59 2/26/2019 08:57:52 C:\Test\ReadOnlyFile.txt
11/29/2018 15:16:50 12/4/2018 16:16:24 C:\Test\LogData.txt
2/25/2019 18:25:11 2/26/2019 12:08:47 C:\Test\Zsystemlog.txt
2/25/2019 18:25:11 2/26/2019 08:55:33 C:\Test\Bfile.txt
2/26/2019 08:46:59 2/26/2019 12:12:19 C:\Test\LogFile3.txt
Il Get-ChildItem cmdlet usa il parametro Path per specificare la directory C:\Test e tutti i *.txt file. Gli oggetti vengono inviati alla pipeline al cmdlet Sort-Object.
Sort-Object usa il parametro Property con un blocco di script per determinare ogni intervallo di tempo dei file tra CreationTime e LastWriteTime.
Esempio 7: Ordinare i nomi in un file di testo
In questo esempio viene illustrato come ordinare un elenco da un file di testo. Il file originale viene visualizzato come un elenco non ordinato.
Sort-Object ordina i contenuti e quindi ordina i contenuti con il parametro Unique che rimuove i duplicati.
# All items unsorted
Get-Content -Path C:\Test\ServerNames.txt
localhost
server01
server25
LOCALHOST
Server19
server3
localhost
# All items sorted
Get-Content -Path C:\Test\ServerNames.txt | Sort-Object
localhost
LOCALHOST
localhost
server01
Server19
server25
server3
# Unique filtered items sorted
Get-Content -Path C:\Test\ServerNames.txt | Sort-Object -Unique
localhost
server01
Server19
server25
server3
Il Get-Content cmdlet usa il parametro Path per specificare la directory e il nome file. Il file ServerNames.txt contiene un elenco non ordinato di nomi di computer.
Il Get-Content cmdlet usa il parametro Path per specificare la directory e il nome file. Il file ServerNames.txt contiene un elenco non ordinato di nomi di computer. Gli oggetti vengono inviati alla pipeline al cmdlet Sort-Object.
Sort-Object Ordina l'elenco nell'ordine predefinito, in ordine crescente.
Il Get-Content cmdlet usa il parametro Path per specificare la directory e il nome file. Il file ServerNames.txt contiene un elenco non ordinato di nomi di computer. Gli oggetti vengono inviati alla pipeline al cmdlet Sort-Object.
Sort-Object utilizza il parametro Unique per rimuovere i nomi di computer duplicati. L'elenco è ordinato nell'ordine predefinito, in ordine crescente.
Esempio 8: Ordinare una stringa come numero intero
In questo esempio viene illustrato come ordinare un file di testo che contiene oggetti stringa come numeri interi. È possibile inviare ogni comando alla pipeline e Get-Member verificare che gli oggetti siano stringhe anziché numeri interi. Per questi esempi, il ProductId.txt file contiene un elenco non ordinato di numeri di prodotto.
Nel primo esempio ottiene Get-Content il contenuto delle righe del file e delle pipe al Sort-Object cmdlet .
Sort-Object Ordina gli oggetti stringa in ordine crescente.
# String sorted
Get-Content -Path C:\Test\ProductId.txt | Sort-Object
0
1
12345
1500
2
2800
3500
4100
500
6200
77
88
99999
# Integer sorted
Get-Content -Path C:\Test\ProductId.txt | Sort-Object {[int]$_}
0
1
2
77
88
500
1500
2800
3500
4100
6200
12345
99999
Nel secondo esempio, Get-Content ottiene il contenuto delle righe di file e pipe al Sort-Object cmdlet .
Sort-Object Utilizza un blocco di script per convertire le stringhe in numeri interi. Nel codice di esempio, [int] converte la stringa in un numero intero e $_ rappresenta ogni stringa man mano che scende nella pipeline. Gli oggetti integer vengono inviati lungo la pipeline al Sort-Object cmdlet.
Sort-Object Ordina gli oggetti integer in ordine numerico.
Esempio 9: Uso di ordinamenti stabili
Quando si usano i parametri Top, Bottom o Stable , gli oggetti ordinati vengono recapitati nell'ordine in cui sono stati ricevuti quando Sort-Object i criteri di ordinamento sono uguali. In questo esempio i numeri da uno a 20 vengono ordinati in base al valore "modulo 3". Il valore modulo è compreso tra zero e due.
1..20 |Sort-Object {$_ % 3}
18
3
15
6
12
9
1
16
13
10
7
4
19
11
8
14
5
17
2
20
1..20 |Sort-Object {$_ % 3} -Stable
3
6
9
12
15
18
1
4
7
10
13
16
19
2
5
8
11
14
17
20
L'output del primo ordinamento viene raggruppato correttamente in base al valore del modulo, ma i singoli elementi non vengono ordinati all'interno dell'intervallo modulo. Il secondo ordinamento usa l'opzione Stable per restituire un ordinamento stabile.
Esempio 10: Ordinare in base a più proprietà
Se si desidera ordinare in base a più proprietà, separare le proprietà in base a virgole.
Get-ChildItem -Path C:\Test | Sort-Object Length,Name
Directory: C:\Test
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 13/10/2021 22:16 2 File01.txt
-a--- 13/10/2021 22:16 2 File03.txt
-a--- 13/10/2021 22:18 64 File02.txt
-a--- 13/10/2021 22:18 64 File04.txt
Il Get-ChildItem cmdlet ottiene i file dalla directory specificata dal parametro Path .
Gli oggetti vengono inviati alla pipeline al cmdlet Sort-Object.
Sort-Object usa il parametro Length e Name per ordinare i file in base alla lunghezza in ordine crescente. Poiché File01.txt e File03.txt hanno la stessa lunghezza, vengono ordinati ulteriormente in base alla proprietà Name.
Esempio 11: Ordinare tabelle hash in base al valore della chiave
A partire da PowerShell 6, Sort-Object supporta l'ordinamento dell'input della tabella hash in base ai valori chiave. Nell'esempio seguente viene ordinata una matrice di tabelle hash in base al valore della chiave di weight ogni tabella hash.
@(
@{ name = 'a' ; weight = 7 }
@{ name = 'b' ; weight = 1 }
@{ name = 'c' ; weight = 3 }
@{ name = 'd' ; weight = 7 }
) | Sort-Object -Property weight -OutVariable Sorted
$Sorted | ForEach-Object -Process { "{0}: {1}" -f $_.name, $_.weight }
Name Value
---- -----
Weight 1
Name b
Weight 3
Name c
Weight 7
Name a
Weight 7
Name d
b: 1
c: 3
a: 7
d: 7
Parametri
-Bottom
Specifica il numero di oggetti da ottenere dalla fine di una matrice di oggetti ordinati. Ciò comporta un ordinamento stabile.
Questo parametro è stato introdotto in PowerShell 6.0.
Proprietà dei parametri
| Tipo: | Int32 |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
Bottom
| Posizione: | Named |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-CaseSensitive
Indica che l'ordinamento fa distinzione tra maiuscole e minuscole. Per impostazione predefinita, gli ordinamenti non fanno distinzione tra maiuscole e minuscole.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | Case-insensitive |
| 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 la configurazione delle impostazioni cultura da utilizzare per gli ordinamenti. Consente Get-Culture di visualizzare la configurazione delle impostazioni cultura del sistema.
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 |
-Descending
Indica che Sort-Object gli oggetti vengono ordinati in ordine decrescente. Il valore predefinito è crescente.
Per ordinare più proprietà con ordinamenti diversi, utilizzare una tabella hash. Ad esempio, con una tabella hash è possibile ordinare una proprietà in ordine crescente e un'altra proprietà in ordine decrescente.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | Ascending |
| 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
Per ordinare gli oggetti, inviarli lungo la pipeline a Sort-Object. Se si utilizza il parametro InputObject per inviare un insieme di elementi, Sort-Object riceve un oggetto che rappresenta l'insieme. Poiché non è possibile ordinare un oggetto, Sort-Object restituisce l'intera raccolta invariata.
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 |
-Property
Specifica i nomi delle proprietà utilizzati Sort-Object per ordinare gli oggetti. Sono consentiti i metacaratteri.
Gli oggetti vengono ordinati in base ai valori delle proprietà. Se non si specifica una proprietà, Sort-Object ordina in base alle proprietà predefinite per il tipo di oggetto o gli oggetti stessi.
Usare le virgole per separare più proprietà. Più proprietà possono essere ordinate in ordine crescente, decrescente o in una combinazione di ordinamenti. Quando si specificano più proprietà, gli oggetti vengono ordinati in base alla prima proprietà. Se più oggetti hanno lo stesso valore per la prima proprietà, tali oggetti vengono ordinati in base alla seconda proprietà. Questo processo continua fino a quando non sono più specificate proprietà o gruppi di oggetti.
Il valore del parametro Property può essere una proprietà calcolata. Per creare una proprietà calcolata, usare uno scriptblock o una tabella hash.
Le chiavi valide per una tabella hash sono le seguenti:
-
Expression-<string>o<script block> -
AscendingoDescending-<boolean>
Per altre informazioni, vedere about_Calculated_Properties.
Proprietà dei parametri
| Tipo: | Object[] |
| Valore predefinito: | Default properties |
| Supporta i caratteri jolly: | True |
| 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 |
-Stable
Gli oggetti ordinati vengono recapitati nell'ordine in cui sono stati ricevuti quando i criteri di ordinamento sono uguali.
Questo parametro è stato aggiunto in PowerShell v6.2.0.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
Default
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Top
Specifica il numero di oggetti da ottenere dall'inizio di una matrice di oggetti ordinati. Ciò comporta un ordinamento stabile.
Questo parametro è stato introdotto in PowerShell 6.0.
Proprietà dei parametri
| Tipo: | Int32 |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
Top
| Posizione: | Named |
| Obbligatorio: | True |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Unique
Indica che Sort-Object elimina i duplicati e restituisce solo i membri univoci dell'insieme. La prima istanza di un valore univoco viene inclusa nell'output ordinato.
Unique non fa distinzione tra maiuscole e minuscole. Le stringhe che differiscono solo per le maiuscole e minuscole sono considerate uguali. Ad esempio, carattere e CARATTERE.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | All |
| 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 |
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 inviare tramite pipe gli oggetti da ordinare a questo cmdlet.
Output
PSObject
Questo cmdlet restituisce gli oggetti ordinati.
Note
PowerShell include gli alias seguenti per Sort-Object:
- Windows:
sort
Il Sort-Object cmdlet ordina gli oggetti in base alle proprietà specificate nel comando o alle proprietà di ordinamento predefinite per il tipo di oggetto. Le proprietà di ordinamento predefinite vengono definite usando l'oggetto PropertySet denominato DefaultKeyPropertySet in un types.ps1xml file. Per altre informazioni, vedere about_Types.ps1xml.
Se un oggetto non dispone di una delle proprietà specificate, il valore della proprietà per tale oggetto viene interpretato da Sort-ObjectNull e posizionato alla fine dell'ordinamento.
Quando non sono disponibili proprietà di ordinamento, PowerShell tenta di confrontare gli oggetti stessi.
Sort-Object utilizza il metodo Compare per ogni proprietà. Se una proprietà non implementa IComparable, il cmdlet converte il valore della proprietà in una stringa e usa il metodo Compare per System.String. Per altre informazioni, vedere Metodo PSObject.CompareTo(Object).
Se si esegue l'ordinamento in base a una proprietà enumerata, ad esempio Status, Sort-Object l'ordinamento viene eseguito in base ai valori di enumerazione. Per i servizi Windows, Stopped ha un valore pari a 1 e Running ha un valore pari a 4.
Stopped viene ordinato prima di Running a causa dei valori enumerati. Per altre informazioni, vedere ServiceControllerStatus.
Le prestazioni dell'algoritmo di ordinamento sono più lente quando si esegue un ordinamento stabile.