Sort-Object
Ordina gli oggetti in base ai valori delle proprietà.
Sintassi
Sort-Object
[[-Property] <Object[]>]
[-Descending]
[-Unique]
[-InputObject <psobject>]
[-Culture <string>]
[-CaseSensitive]
[<CommonParameters>]
Descrizione
Il cmdlet ordina gli oggetti in ordine crescente o decrescente in base ai valori delle proprietà dell'oggetto Sort-Object
. Se le proprietà di ordinamento non sono incluse in un comando, PowerShell usa le proprietà di ordinamento predefinite.
È possibile ordinare gli oggetti in base a una singola proprietà o a più proprietà. Più proprietà usano tabelle hash per ordinare in ordine crescente, ordine 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 eliminare i duplicati dall'output.
Esempio
Esempio 1: Ordinare la directory corrente in base al nome
Questo comando ordina i file e le sottodirectory in una directory.
PS> 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, Nome.
Esempio 2: Ordinare la directory corrente in base alla lunghezza del file
Questo comando visualizza i file nella directory corrente in ordine crescente.
PS> 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 più elevato della memoria in base alle dimensioni del set di lavoro (WS).
PS> 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 di processo vengono inviati alla pipeline al Sort-Object
cmdlet. Sort-Object
usa il parametro Property per ordinare gli oggetti da 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 l'utilizzo più elevato di WS .
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 la propria cronologia dei comandi.
PS> 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
usa il parametro Property per ordinare gli oggetti in base all'ID. Il parametro Decrescente ordina la cronologia dei comandi da più recente a meno recente.
Esempio 5: Usare una tabella hash per ordinare le proprietà in ordine crescente e decrescente
Questo comando usa due proprietà per ordinare gli oggetti, Stato e DisplayName. Lo stato viene ordinato in ordine decrescente e DisplayName viene ordinato in ordine crescente.
Viene usata una tabella hash per specificare il valore del parametro Property . La tabella hash usa un'espressione per specificare i nomi delle proprietà e ordinare gli ordini. Per altre informazioni sulle tabelle hash, vedere about_Hash_Tables.
La proprietà Status usata nella tabella hash è una proprietà enumerata. Per altre informazioni, vedere ServiceControllerStatus.
PS C:\> 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 del servizio vengono inviati alla pipeline al Sort-Object
cmdlet. Sort-Object
usa 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.
Lo stato è una proprietà enumerata. Arrestato ha un valore 1 e Running ha un valore pari a 4. Il parametro Decrescente è impostato su $True
in modo che i processi in esecuzione vengano visualizzati prima dei processi arrestati . DisplayName imposta il parametro Decrescente su per $False
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.
PS> Get-ChildItem -Path C:\Test\*.txt | Sort-Object -Property @{Expression = {$_.CreationTime - $_.LastWriteTime}; Descending = $False} | 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 una tabella hash per determinare ogni intervallo di tempo tra CreationTime e LastWriteTime. Il parametro Decrescente è impostato su per $False
ordinare nell'ordine di tempo più lungo e più breve.
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.
PS> Get-Content -Path C:\Test\ServerNames.txt
localhost
server01
server25
LOCALHOST
Server19
server3
localhost
PS> Get-Content -Path C:\Test\ServerNames.txt | Sort-Object
localhost
LOCALHOST
localhost
server01
Server19
server25
server3
PS> 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 del 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 del 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 del 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 nomi di computer duplicati. L'elenco viene ordinato nell'ordine predefinito, crescente.
Esempio 8: Ordinare una stringa come intero
In questo esempio viene illustrato come ordinare un file di testo contenente oggetti stringa come interi. È possibile inviare ogni comando alla pipeline Get-Member
e verificare che gli oggetti siano stringhe o interi.
PS> Get-Content -Path C:\Test\ProductId.txt | Sort-Object
0
1
12345
1500
2
2800
3500
4100
500
6200
77
88
99999
PS> Get-Content -Path C:\Test\ProductId.txt | ForEach-Object -Process {[int]$_} | Sort-Object
0
1
2
77
88
500
1500
2800
3500
4100
6200
12345
99999
Il Get-Content
cmdlet usa il parametro Path per specificare la directory e il nome del file. Il file ProductId.txt contiene un elenco non ordinato di numeri di prodotto. Gli oggetti stringa vengono inviati alla pipeline al Sort-Object
cmdlet. Sort-Object
ordina gli oggetti stringa in ordine crescente.
Il Get-Content
cmdlet usa il parametro Path per specificare la directory e il nome del file. Il file ProductId.txt contiene un elenco non ordinato di numeri di prodotto. Gli oggetti stringa vengono inviati alla pipeline al ForEach-Object
cmdlet. ForEach-Object
usa un blocco di script per convertire le stringhe in interi. Nel codice [int]
di esempio converte la stringa in un intero e $_
rappresenta ogni stringa in base alla pipeline. Gli oggetti integer vengono inviati alla pipeline al Sort-Object
cmdlet. Sort-Object
ordina gli oggetti integer in ordine numerico.
Parametri
-CaseSensitive
Indica che l'ordinamento fa distinzione tra maiuscole e minuscole. Per impostazione predefinita, gli ordinamenti non fanno distinzione tra maiuscole e minuscole.
Type: | SwitchParameter |
Position: | Named |
Default value: | Case-insensitive |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Culture
Specifica la configurazione culturale da utilizzare per gli ordinamenti. Usare Get-Culture
per visualizzare la configurazione delle impostazioni cultura del sistema.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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.
Type: | SwitchParameter |
Position: | Named |
Default value: | Ascending |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Per ordinare gli oggetti, inviarli alla 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.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | 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
viene ordinato in base alle proprietà predefinite per il tipo di oggetto.
È possibile ordinare più proprietà in ordine crescente, decrescente o 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 una tabella hash.
Le chiavi valide per una tabella hash sono le seguenti:
- Stringa> di espressione <o <blocco di script>
- Boolean crescente <>
- Valore booleano decrescente <>
Type: | Object[] |
Position: | 0 |
Default value: | Default properties |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-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.
Univoco senza distinzione tra maiuscole e minuscole. Le stringhe che differiscono solo in base alla distinzione tra maiuscole e minuscole sono considerate uguali. Ad esempio, carattere e CARATTERE.
Type: | SwitchParameter |
Position: | Named |
Default value: | All |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Input
È possibile eseguire la pipe degli oggetti da ordinare in Sort-Object
.
Output
Sort-Object
restituisce gli oggetti ordinati.
Note
Il Sort-Object
cmdlet ordina oggetti in base alle proprietà specificate nel comando o alle proprietà di ordinamento predefinite per il tipo di oggetto. Se un oggetto non ha una delle proprietà specificate, il valore della proprietà per tale oggetto viene interpretato da Sort-Object
Null e inserito alla fine dell'ordinamento.
Sort-Object
usa 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 una proprietà enumerata, ad esempio Status, Sort-Object
ordina in base ai valori di enumerazione. Stopped ha un valore pari a 1 e Running ha un valore pari a 4. Arrestato viene ordinato prima di In esecuzione a causa dei valori enumerati. Per altre informazioni, vedere ServiceControllerStatus.