Ordenar objetos
Podemos organizar os dados exibidos para facilitar a verificação usando o Sort-Object
cmdlet.
Sort-Object
Usa o nome de uma ou mais propriedades para classificar e retorna dados classificados pelos valores dessas propriedades.
Classificação básica
Considere o problema de listar subdiretórios e arquivos no diretório atual. Se quisermos classificar por LastWriteTime e, em seguida, por Name, podemos fazê-lo digitando:
Get-ChildItem |
Sort-Object -Property LastWriteTime, Name |
Format-Table -Property LastWriteTime, Name
LastWriteTime Name
------------- ----
11/6/2017 10:10:11 AM .localization-config
11/6/2017 10:10:11 AM .openpublishing.build.ps1
11/6/2017 10:10:11 AM appveyor.yml
11/6/2017 10:10:11 AM LICENSE
11/6/2017 10:10:11 AM LICENSE-CODE
11/6/2017 10:10:11 AM ThirdPartyNotices
11/6/2017 10:10:15 AM tests
6/6/2018 7:58:59 PM CONTRIBUTING.md
6/6/2018 7:58:59 PM README.md
...
Você também pode classificar os objetos em ordem inversa especificando o parâmetro Descending switch.
Get-ChildItem |
Sort-Object -Property LastWriteTime, Name -Descending |
Format-Table -Property LastWriteTime, Name
LastWriteTime Name
------------- ----
12/1/2018 10:13:50 PM reference
12/1/2018 10:13:50 PM dsc
...
6/6/2018 7:58:59 PM README.md
6/6/2018 7:58:59 PM CONTRIBUTING.md
11/6/2017 10:10:15 AM tests
11/6/2017 10:10:11 AM ThirdPartyNotices
11/6/2017 10:10:11 AM LICENSE-CODE
11/6/2017 10:10:11 AM LICENSE
11/6/2017 10:10:11 AM appveyor.yml
11/6/2017 10:10:11 AM .openpublishing.build.ps1
11/6/2017 10:10:11 AM .localization-config
Usando tabelas de hash
Você pode classificar propriedades diferentes em ordens diferentes usando tabelas de hash em uma matriz. Cada tabela de hash usa uma chave Expression para especificar o nome da propriedade como string e uma chave Ascendente ou Descendente para especificar a ordem de classificação por $true
ou $false
. A chave Expressão é obrigatória. A tecla Ascendente ou Descendente é opcional.
O exemplo a seguir classifica objetos em ordem decrescente LastWriteTime e ordem de Nome crescente.
Get-ChildItem |
Sort-Object -Property @{ Expression = 'LastWriteTime'; Descending = $true },
@{ Expression = 'Name'; Ascending = $true } |
Format-Table -Property LastWriteTime, Name
LastWriteTime Name
------------- ----
12/1/2018 10:13:50 PM dsc
12/1/2018 10:13:50 PM reference
11/29/2018 6:56:01 PM .openpublishing.redirection.json
11/29/2018 6:56:01 PM gallery
11/24/2018 10:33:22 AM developer
11/20/2018 7:22:19 PM .markdownlint.json
...
Você também pode definir um scriptblock para a chave Expression . Ao executar o Sort-Object
cmdlet, o scriptblock é executado e o resultado é usado para classificação.
O exemplo a seguir classifica objetos em ordem decrescente pelo intervalo de tempo entre CreationTime e LastWriteTime.
Get-ChildItem |
Sort-Object -Property @{ Exp = { $_.LastWriteTime - $_.CreationTime }; Desc = $true } |
Format-Table -Property LastWriteTime, CreationTime
LastWriteTime CreationTime
------------- ------------
12/1/2018 10:13:50 PM 11/6/2017 10:10:11 AM
12/1/2018 10:13:50 PM 11/6/2017 10:10:11 AM
11/7/2018 6:52:24 PM 11/6/2017 10:10:11 AM
11/7/2018 6:52:24 PM 11/6/2017 10:10:15 AM
11/3/2018 9:58:17 AM 11/6/2017 10:10:11 AM
10/26/2018 4:50:21 PM 11/6/2017 10:10:11 AM
11/17/2018 1:10:57 PM 11/29/2017 5:48:30 PM
11/12/2018 6:29:53 PM 12/7/2017 7:57:07 PM
...
Sugestões
Você pode omitir o nome do parâmetro Property da seguinte maneira:
Sort-Object LastWriteTime, Name
Além disso, você pode se referir por Sort-Object
seu alias embutido, sort
:
sort LastWriteTime, Name
As chaves nas tabelas de hash para classificação podem ser abreviadas da seguinte forma:
Sort-Object @{ e = 'LastWriteTime'; d = $true }, @{ e = 'Name'; a = $true }
Neste exemplo, o e significa Expressão, o d significa Descendente e o a significa Ascendente.
Para melhorar a legibilidade, você pode colocar as tabelas de hash em uma variável separada:
$order = @(
@{ Expression = 'LastWriteTime'; Descending = $true }
@{ Expression = 'Name'; Ascending = $true }
)
Get-ChildItem |
Sort-Object $order |
Format-Table LastWriteTime, Name
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários