Sort-Object
Ordena objetos por valores de propriedade.
Syntax
Sort-Object
[[-Property] <Object[]>]
[-Descending]
[-Unique]
[-InputObject <psobject>]
[-Culture <string>]
[-CaseSensitive]
[<CommonParameters>]
Description
O Sort-Object
cmdlet ordena objetos por ordem ascendente ou descendente com base nos valores de propriedade do objeto. Se as propriedades de ordenação não estiverem incluídas num comando, o PowerShell utiliza as propriedades de ordenação predefinidas.
Pode ordenar objetos por uma única propriedade ou várias propriedades. Várias propriedades utilizam tabelas hash para ordenar em ordem ascendente, descendente ou uma combinação de sequências de ordenação. As propriedades são ordenadas como sensíveis a maiúsculas e minúsculas ou não sensíveis a maiúsculas e minúsculas. Utilize o parâmetro Exclusivo para eliminar duplicados da saída.
Exemplos
Exemplo 1: ordenar o diretório atual por nome
Este comando ordena os ficheiros e subdiretórios num diretório.
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
O Get-ChildItem
cmdlet obtém os ficheiros e subdiretórios do diretório especificado pelo parâmetro Path , C:\Test. Os objetos são enviados pelo pipeline para o Sort-Object
cmdlet .
Sort-Object
não especifica uma propriedade, pelo que a saída é ordenada pela propriedade de ordenação predefinida, Nome.
Exemplo 2: Ordenar o diretório atual por comprimento de ficheiro
Este comando apresenta os ficheiros no diretório atual por comprimento por ordem ascendente.
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
O Get-ChildItem
cmdlet obtém os ficheiros do diretório especificado pelo parâmetro Path .
O parâmetro Ficheiro especifica que Get-ChildItem
apenas obtém objetos de ficheiro. Os objetos são enviados pelo pipeline para o Sort-Object
cmdlet . Sort-Object
utiliza o parâmetro Length para ordenar os ficheiros por comprimento por ordem ascendente.
Exemplo 3: Ordenar processos por utilização da memória
Este exemplo apresenta processos com a maior utilização de memória com base no respetivo tamanho do conjunto de trabalho (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
O Get-Process
cmdlet obtém a lista de processos em execução no computador. Os objetos de processo são enviados pelo pipeline para o Sort-Object
cmdlet . Sort-Object
utiliza o parâmetro Propriedade para ordenar os objetos por WS. Os objetos são enviados pelo pipeline para o Select-Object
cmdlet .
Select-Object
utiliza o Último parâmetro para especificar os últimos cinco objetos, que são os objetos com a utilização mais elevada do WS .
Exemplo 4: Ordenar objetos HistoryInfo por ID
Este comando ordena os objetos HistoryInfo da sessão do PowerShell com a propriedade ID . Cada sessão do PowerShell tem o seu próprio histórico de comandos.
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\
O Get-History
cmdlet obtém os objetos do histórico a partir da sessão atual do PowerShell. Os objetos são enviados pelo pipeline para o Sort-Object
cmdlet . Sort-Object
utiliza o parâmetro Propriedade para ordenar os objetos por ID. O parâmetro Descendente ordena o histórico de comandos do mais recente para o mais antigo.
Exemplo 5: utilize uma tabela hash para ordenar as propriedades em ordem ascendente e descendente
Este comando utiliza duas propriedades para ordenar os objetos Status eDisplayName. O estado é ordenado por ordem descendente e DisplayName é ordenado por ordem ascendente.
As tabelas hash são utilizadas para especificar o valor do parâmetro Property. As tabelas hash utilizam uma expressão para especificar os nomes da propriedade e as sequências de ordenação. Para obter mais informações sobre tabelas hash, veja about_Hash_Tables.
A propriedade Status utilizada na tabela hash é uma propriedade enumerada. Para obter mais informações, veja 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
O Get-Service
cmdlet obtém a lista de serviços no computador. Os objetos de serviço são enviados pelo pipeline para o Sort-Object
cmdlet . Sort-Object
utiliza o parâmetro Property com uma tabela hash para especificar os nomes da propriedade e as sequências de ordenação. O parâmetro Propriedade é ordenado por duas propriedades, Estado por ordem descendente e DisplayName por ordem ascendente.
O estado é uma propriedade enumerada. Parado tem um valor de 1 e Executar tem um valor de 4. O parâmetro Descendente está definido como para $True
que os processos em execução sejam apresentados antes dos processos Parados . DisplayName define o parâmetro Descendente para $False
ordenar os nomes a apresentar por ordem alfabética.
Exemplo 6: Ordenar ficheiros de texto por intervalo de tempo
Este comando ordena os ficheiros de texto por ordem descendente pelo intervalo de tempo entre 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
O Get-ChildItem
cmdlet utiliza o parâmetro Path para especificar o diretório C:\Test e todos os *.txt
ficheiros. Os objetos são enviados pelo pipeline para o Sort-Object
cmdlet .
Sort-Object
utiliza o parâmetro Property com uma tabela hash para determinar cada período de tempo entre CreationTime e LastWriteTime. O parâmetro Descendente está definido para $False
ordenar pela ordem do intervalo de tempo mais longo para o mais curto.
Exemplo 7: Ordenar nomes num ficheiro de texto
Este exemplo mostra como ordenar uma lista a partir de um ficheiro de texto. O ficheiro original é apresentado como uma lista não ordenada. Sort-Object
ordena os conteúdos e, em seguida, ordena os conteúdos com o parâmetro Exclusivo que remove duplicados.
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
O Get-Content
cmdlet utiliza o parâmetro Path para especificar o diretório e o nome do ficheiro. O ficheiroServerNames.txt contém uma lista não ordenada de nomes de computadores.
O Get-Content
cmdlet utiliza o parâmetro Path para especificar o diretório e o nome do ficheiro. O ficheiroServerNames.txt contém uma lista não ordenada de nomes de computadores. Os objetos são enviados pelo pipeline para o Sort-Object
cmdlet . Sort-Object
ordena a lista pela ordem predefinida, ascendente.
O Get-Content
cmdlet utiliza o parâmetro Path para especificar o diretório e o nome do ficheiro. O ficheiroServerNames.txt contém uma lista não ordenada de nomes de computadores. Os objetos são enviados pelo pipeline para o Sort-Object
cmdlet . Sort-Object
utiliza o parâmetro Exclusivo para remover nomes de computadores duplicados. A lista está ordenada pela ordem predefinida, ascendente.
Exemplo 8: Ordenar uma cadeia como um número inteiro
Este exemplo mostra como ordenar um ficheiro de texto que contém objetos de cadeia como números inteiros. Pode enviar cada comando pelo pipeline para Get-Member
e verificar se os objetos são cadeias ou números inteiros.
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
O Get-Content
cmdlet utiliza o parâmetro Path para especificar o diretório e o nome do ficheiro. O ficheiroProductId.txt contém uma lista não ordenada de números de produto. Os objetos de cadeia são enviados pelo pipeline para o Sort-Object
cmdlet . Sort-Object
ordena os objetos de cadeia por ordem ascendente.
O Get-Content
cmdlet utiliza o parâmetro Path para especificar o diretório e o nome do ficheiro. O ficheiroProductId.txt contém uma lista não ordenada de números de produto. Os objetos de cadeia são enviados pelo pipeline para o ForEach-Object
cmdlet . ForEach-Object
utiliza um bloco de scripts para converter as cadeias em números inteiros. No código de exemplo, [int]
converte a cadeia num número inteiro e $_
representa cada cadeia à medida que desce o pipeline. Os objetos inteiros são enviados pelo pipeline para o Sort-Object
cmdlet . Sort-Object
ordena os objetos inteiros por ordem numérica.
Parâmetros
-CaseSensitive
Indica que a ordenação é sensível às maiúsculas e minúsculas. Por predefinição, as ordenações não são sensíveis a maiúsculas e minúsculas.
Type: | SwitchParameter |
Position: | Named |
Default value: | Case-insensitive |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Culture
Especifica a configuração cultural a utilizar para ordenações. Utilizado Get-Culture
para apresentar a configuração de cultura do sistema.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Descending
Indica que Sort-Object
ordena os objetos por ordem descendente. A predefinição é ordem ascendente.
Para ordenar várias propriedades com diferentes sequências de ordenação, utilize uma tabela hash. Por exemplo, com uma tabela hash pode ordenar uma propriedade em ordem ascendente e outra propriedade em ordem descendente.
Type: | SwitchParameter |
Position: | Named |
Default value: | Ascending |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Para ordenar objetos, envie-os pelo pipeline para Sort-Object
. Se utilizar o parâmetro InputObject para submeter uma coleção de itens, Sort-Object
receberá um objeto que representa a coleção. Como não é possível ordenar um objeto, Sort-Object
devolve toda a coleção inalterada.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Property
Especifica os nomes de propriedade que Sort-Object
utiliza para ordenar os objetos. Os carateres universais são permitidos.
Os objetos são ordenados com base nos valores de propriedade. Se não especificar uma propriedade, Sort-Object
ordena com base nas propriedades predefinidas do tipo de objeto.
Várias propriedades podem ser ordenadas por ordem ascendente, ordem descendente ou combinação de sequências de ordenação. Quando especifica várias propriedades, os objetos são ordenados pela primeira propriedade. Se vários objetos tiverem o mesmo valor para a primeira propriedade, esses objetos são ordenados pela segunda propriedade. Este processo continua até que não existam mais propriedades especificadas ou nenhum grupo de objetos.
O valor do parâmetro Propriedade pode ser uma propriedade calculada. Para criar uma propriedade calculada, utilize uma tabela hash.
As chaves válidas para uma tabela hash são as seguintes:
- Cadeia de> expressão <ou <bloco de script>
- Booleano ascendente <>
- Booleano descendente <>
Type: | Object[] |
Position: | 0 |
Default value: | Default properties |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-Unique
Indica que Sort-Object
elimina duplicados e devolve apenas os membros exclusivos da coleção. A primeira instância de um valor exclusivo está incluída na saída ordenada.
Exclusivo não é sensível a maiúsculas e minúsculas. As cadeias que só diferem por caso de caráter são consideradas iguais. Por exemplo, caráter e CARÁTER.
Type: | SwitchParameter |
Position: | Named |
Default value: | All |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Entradas
Pode encaminhar os objetos para serem ordenados como Sort-Object
.
Saídas
Sort-Object
devolve os objetos ordenados.
Notas
O Sort-Object
cmdlet ordena objetos com base nas propriedades especificadas no comando ou nas propriedades de ordenação predefinidas do tipo de objeto. Se um objeto não tiver uma das propriedades especificadas, o valor da propriedade desse objeto é interpretado como Sort-Object
Nulo e colocado no final da sequência de ordenação.
Sort-Object
utiliza o método Compare para cada propriedade. Se uma propriedade não implementar IComparable, o cmdlet converte o valor da propriedade numa cadeia e utiliza o método Compare para System.String. Para obter mais informações, veja Método PSObject.CompareTo(Object).
Se ordenar numa propriedade enumerada, como Estado, Sort-Object
ordena pelos valores de enumeração. Parado tem um valor de 1 e Executar tem um valor de 4. Parado é ordenado antes de Executar devido aos valores enumerados. Para obter mais informações, veja ServiceControllerStatus.