Sort-Object
Ordina gli oggetti in base ai valori delle proprietà.
Sintassi
Sort-Object
[-Stable]
[-Descending]
[-Unique]
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Sort-Object
[-Descending]
[-Unique]
-Top <Int32>
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-Culture <String>]
[-CaseSensitive]
[<CommonParameters>]
Sort-Object
[-Descending]
[-Unique]
-Bottom <Int32>
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-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 altre informazioni, vedere la sezione Note .
È possibile ordinare gli oggetti in base a una singola proprietà o a più proprietà. Più proprietà usano tabelle hash per ordinare in ordine crescente, decrescente o una combinazione di ordini di ordinamento. Le proprietà vengono ordinate come 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 Sort-Object
cmdlet .
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 per lunghezza 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 specifica che Get-ChildItem
ottiene solo oggetti file. Gli oggetti vengono inviati alla pipeline al Sort-Object
cmdlet . Sort-Object
usa 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 Sort-Object
cmdlet . Sort-Object
utilizza il parametro Property per ordinare gli oggetti in base a WS. Gli oggetti vengono inviati alla pipeline al Select-Object
cmdlet .
Select-Object
usa il parametro Last per specificare gli ultimi cinque oggetti, ovvero gli oggetti con il massimo utilizzo di WS .
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 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 cronologia dalla sessione di PowerShell corrente. Gli oggetti vengono inviati alla pipeline al Sort-Object
cmdlet . Sort-Object
utilizza il parametro Property per ordinare gli oggetti in base all'ID. Il parametro Decrescente 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.
Viene utilizzata una tabella hash per specificare il valore del parametro Property . La tabella hash usa un'espressione per specificare i nomi delle proprietà e gli ordini di ordinamento. 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 Sort-Object
cmdlet . Sort-Object
utilizza il parametro Property con una tabella hash per specificare i nomi delle proprietà e ordinare gli ordini. Il parametro Property viene ordinato in base a due proprietà, Status in ordine decrescente e DisplayName in ordine crescente.
Status è una proprietà enumerata. Stopped ha un valore pari a 1 e Running ha un valore pari a 4. Il parametro Descending è 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 per intervallo di tempo
Questo comando ordina i file di testo in ordine decrescente in base all'intervallo di tempo 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 Sort-Object
cmdlet .
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 elenco non ordinato. Sort-Object
ordina il contenuto e quindi ordina il contenuto 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 Sort-Object
cmdlet . Sort-Object
ordina l'elenco nell'ordine predefinito, 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 Sort-Object
cmdlet . Sort-Object
usa il parametro Unique per rimuovere i nomi di computer duplicati. L'elenco viene ordinato nell'ordine predefinito, crescente.
Esempio 8: Ordinare una stringa come numero intero
In questo esempio viene illustrato come ordinare un file di testo contenente 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
usa un blocco di script per convertire le stringhe in numeri interi. Nel codice [int]
di esempio converte la stringa in un numero intero e $_
rappresenta ogni stringa man mano che si trova nella pipeline. Gli oggetti integer vengono inviati alla 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 Sort-Object
cmdlet . 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.
Tipo: | Int32 |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-CaseSensitive
Indica che l'ordinamento fa distinzione tra maiuscole e minuscole. Per impostazione predefinita, gli ordinamenti non fanno distinzione tra maiuscole e minuscole.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | Case-insensitive |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Culture
Specifica la configurazione culturale da utilizzare per gli ordinamenti. Usare Get-Culture
per visualizzare la configurazione delle impostazioni cultura del sistema.
Tipo: | String |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Descending
Indica che Sort-Object
ordina gli oggetti in ordine decrescente. Per impostazione predefinita, l'ordinamento è crescente.
Per ordinare più proprietà con ordinamenti diversi, usare una tabella hash. Ad esempio, con una tabella hash è possibile ordinare una proprietà in ordine crescente e un'altra proprietà in ordine decrescente.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | Ascending |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-InputObject
Per ordinare gli oggetti, inviarli verso il basso nella pipeline a Sort-Object
. Se si utilizza il parametro InputObject per inviare una raccolta di elementi, Sort-Object
riceve un oggetto che rappresenta la raccolta. Poiché non è possibile ordinare un oggetto, Sort-Object
restituisce l'intera raccolta invariata.
Tipo: | PSObject |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
-Property
Specifica i nomi delle proprietà utilizzati Sort-Object
per ordinare gli oggetti. I caratteri jolly sono consentiti.
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à. È possibile ordinare più proprietà in ordine crescente, decrescente o in una combinazione di ordini di ordinamento. 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 presenti più proprietà né gruppi di oggetti specificati.
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>
oppure<script block>
ascending
oppuredescending
-<boolean>
Per altre informazioni, vedere about_Calculated_Properties.
Tipo: | Object[] |
Posizione: | 0 |
Valore predefinito: | Default properties |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | True |
-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.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | 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.
Tipo: | Int32 |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Unique
Indica che Sort-Object
elimina i duplicati e restituisce solo i membri univoci della raccolta. La prima istanza di un valore univoco è inclusa nell'output ordinato.
L'univocità non fa distinzione tra maiuscole e minuscole. Le stringhe che differiscono solo in base alla distinzione tra maiuscole e minuscole vengono considerate uguali. Ad esempio, carattere e CARATTERE.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | All |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
Input
È possibile inviare tramite pipe gli oggetti da ordinare a questo cmdlet.
Output
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-Object
Null 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
vengono ordinati 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 In esecuzione 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.