Condividi tramite


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

PSObject

È possibile eseguire la pipe degli oggetti da ordinare in Sort-Object.

Output

PSObject

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-ObjectNull 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.