Sort-Object
Ordena los objetos por valores de propiedad.
Sintaxis
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>]
Description
El Sort-Object
cmdlet ordena los objetos en orden ascendente o descendente en función de los valores de propiedad del objeto. Si las propiedades de ordenación no se incluyen en un comando, PowerShell usa propiedades de ordenación predeterminadas del primer objeto de entrada. Si el tipo del objeto de entrada no tiene propiedades de ordenación predeterminadas, PowerShell intenta comparar los propios objetos. Para más información, vea la sección Notas.
Puede ordenar objetos por una sola propiedad o varias propiedades. Varias propiedades usan tablas hash para ordenar en orden ascendente, orden descendente o una combinación de órdenes de ordenación. Las propiedades se ordenan como distinguen mayúsculas de minúsculas o no distinguen mayúsculas de minúsculas. Use el parámetro Unique para quitar duplicados de la salida.
Ejemplos
Ejemplo 1: Ordenar el directorio actual por nombre
En este ejemplo se ordenan los archivos y subdirectorios de un directorio.
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
El Get-ChildItem
cmdlet obtiene los archivos y subdirectorios del directorio especificado por el parámetro Path , C:\Test
. Los objetos se envían a la canalización al Sort-Object
cmdlet .
Sort-Object
no especifica una propiedad para que la salida se ordene por la propiedad de ordenación predeterminada, Name.
Ejemplo 2: Ordenar el directorio actual por longitud de archivo
Este comando muestra los archivos del directorio actual por longitud en orden ascendente.
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
El Get-ChildItem
cmdlet obtiene los archivos del directorio especificado por el parámetro Path .
El parámetro File especifica que Get-ChildItem
solo obtiene objetos de archivo. Los objetos se envían a la canalización al Sort-Object
cmdlet . Sort-Object
usa el parámetro Length para ordenar los archivos por longitud en orden ascendente.
Ejemplo 3: Ordenar procesos por uso de memoria
En este ejemplo se muestran los procesos con el mayor uso de memoria en función del tamaño del conjunto de trabajo (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
El Get-Process
cmdlet obtiene la lista de procesos que se ejecutan en el equipo. Los objetos de proceso se envían por la canalización al Sort-Object
cmdlet . Sort-Object
usa el parámetro Property para ordenar los objetos por WS. Los objetos se envían a la canalización al Select-Object
cmdlet .
Select-Object
usa el parámetro Last para especificar los últimos cinco objetos, que son los objetos con el uso de WS más alto.
En PowerShell 6, el Sort-Object
parámetro Bottom es una alternativa a Select-Object
. Por ejemplo, Get-Process | Sort-Object -Property WS -Bottom 5
.
Ejemplo 4: Ordenar objetos HistoryInfo por identificador
Este comando ordena los objetos HistoryInfo de la sesión de PowerShell mediante la propiedad Id. Cada sesión de PowerShell tiene su propio historial de comandos.
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\
El Get-History
cmdlet obtiene los objetos de historial de la sesión actual de PowerShell. Los objetos se envían a la canalización al Sort-Object
cmdlet . Sort-Object
usa el parámetro Property para ordenar los objetos por Id. El parámetro Descendente ordena el historial de comandos del más reciente al más antiguo.
Ejemplo 5: Usar una tabla hash para ordenar las propiedades en orden ascendente y descendente
En este ejemplo se usan dos propiedades para ordenar los objetos, Status y DisplayName. El estado se ordena en orden descendente y DisplayName se ordena en orden ascendente.
Se usa una tabla hash para especificar el valor del parámetro Property . La tabla hash usa una expresión para especificar los nombres de propiedad y los pedidos de ordenación. Para obtener más información sobre las tablas hash, consulte about_Hash_Tables.
La propiedad Status usada en la tabla hash es una propiedad enumerada. Para obtener más información, consulte 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
El Get-Service
cmdlet obtiene la lista de servicios en el equipo. Los objetos de servicio se envían a la canalización al Sort-Object
cmdlet . Sort-Object
usa el parámetro Property con una tabla hash para especificar los nombres de propiedad y los pedidos de ordenación. El parámetro Property se ordena por dos propiedades, Status en orden descendente y DisplayName en orden ascendente.
Status es una propiedad enumerada. Stopped tiene un valor de 1 y Running tiene un valor de 4. El parámetro Descendente se establece en $True
para que los procesos en ejecución se muestren antes de los procesos detenidos . DisplayName establece el parámetro Descendente para $False
ordenar los nombres para mostrar en orden alfabético.
Ejemplo 6: Ordenar archivos de texto por intervalo de tiempo
Este comando ordena los archivos de texto en orden descendente por el intervalo de tiempo entre CreationTime y 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
El Get-ChildItem
cmdlet usa el parámetro Path para especificar el directorio C:\Test
y todos los *.txt
archivos. Los objetos se envían a la canalización al Sort-Object
cmdlet .
Sort-Object
usa el parámetro Property con un scriptblock para determinar cada intervalo de tiempo de los archivos entre CreationTime y LastWriteTime.
Ejemplo 7: Ordenar nombres en un archivo de texto
En este ejemplo se muestra cómo ordenar una lista de un archivo de texto. El archivo original se muestra como una lista no ordenada. Sort-Object
ordena el contenido y, a continuación, ordena el contenido con el parámetro Unique que quita duplicados.
# 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
El Get-Content
cmdlet usa el parámetro Path para especificar el directorio y el nombre de archivo. El archivo ServerNames.txt
contiene una lista no ordenada de nombres de equipo.
El Get-Content
cmdlet usa el parámetro Path para especificar el directorio y el nombre de archivo. El archivo ServerNames.txt
contiene una lista no ordenada de nombres de equipo. Los objetos se envían a la canalización al Sort-Object
cmdlet . Sort-Object
ordena la lista en el orden predeterminado, ascendente.
El Get-Content
cmdlet usa el parámetro Path para especificar el directorio y el nombre de archivo. El archivo ServerNames.txt
contiene una lista no ordenada de nombres de equipo. Los objetos se envían a la canalización al Sort-Object
cmdlet . Sort-Object
usa el parámetro Unique para quitar nombres de equipo duplicados. La lista se ordena en el orden predeterminado, ascendente.
Ejemplo 8: Ordenar una cadena como un entero
En este ejemplo se muestra cómo ordenar un archivo de texto que contiene objetos de cadena como enteros. Puede enviar cada comando a la canalización y Get-Member
comprobar que los objetos son cadenas en lugar de enteros. Para estos ejemplos, el ProductId.txt
archivo contiene una lista no ordenada de números de producto.
En el primer ejemplo, Get-Content
obtiene el contenido del archivo y canaliza las líneas al Sort-Object
cmdlet . Sort-Object
ordena los objetos de cadena en orden ascendente.
# 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
En el segundo ejemplo, Get-Content
obtiene el contenido del archivo y canaliza las líneas al Sort-Object
cmdlet . Sort-Object
usa un bloque de script para convertir las cadenas en enteros. En el código de ejemplo, [int]
convierte la cadena en un entero y $_
representa cada cadena a medida que llega a la canalización. Los objetos enteros se envían a la canalización al Sort-Object
cmdlet .
Sort-Object
ordena los objetos enteros en orden numérico.
Ejemplo 9: Uso de ordenación estable
Cuando se usan los parámetros Top, Bottom o Stable , los objetos ordenados se entregan en el orden en que se recibieron cuando Sort-Object
los criterios de ordenación son iguales. En este ejemplo, se ordenan los números uno al 20 por el valor "módulo 3". El valor de módulo oscila entre cero y dos.
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
La salida de la primera ordenación se agrupa correctamente por el valor del módulo, pero los elementos individuales no se ordenan dentro del intervalo de módulos. La segunda ordenación usa la opción Estable para devolver una ordenación estable.
Ejemplo 10: Ordenar por varias propiedades
Si desea ordenar por varias propiedades, separe las propiedades por comas.
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
El Get-ChildItem
cmdlet obtiene los archivos del directorio especificado por el parámetro Path .
Los objetos se envían a la canalización al Sort-Object
cmdlet . Sort-Object
usa el parámetro Length y Name para ordenar los archivos por longitud en orden ascendente. Puesto File01.txt
que y File03.txt
tienen la misma longitud, se ordenan por su propiedad Name.
Ejemplo 11: Ordenar tablas hash por valor de clave
A partir de PowerShell 6, Sort-Object
admite la ordenación de la entrada de tabla hash por valores de clave. En el ejemplo siguiente se ordena una matriz de tablas hash por el valor de la clave de weight
cada tabla 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
Parámetros
-Bottom
Especifica el número de objetos que se van a obtener del final de una matriz de objetos ordenadas. Esto da como resultado una ordenación estable.
Este parámetro se introdujo en PowerShell 6.0.
Tipo: | Int32 |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-CaseSensitive
Indica que la ordenación distingue mayúsculas de minúsculas. De forma predeterminada, las ordenación no distinguen mayúsculas de minúsculas.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | Case-insensitive |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Culture
Especifica la configuración cultural que se va a usar para las ordenación. Use Get-Culture
para mostrar la configuración de referencia cultural del sistema.
Tipo: | String |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Descending
Indica que Sort-Object
ordena los objetos en orden descendente. El valor predeterminado es ascendente.
Para ordenar varias propiedades con distintos pedidos de ordenación, use una tabla hash. Por ejemplo, con una tabla hash puede ordenar una propiedad en orden ascendente y otra propiedad en orden descendente.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | Ascending |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-InputObject
Para ordenar objetos, envíelos a la canalización a Sort-Object
. Si usa el parámetro InputObject para enviar una colección de elementos, Sort-Object
recibe un objeto que representa la colección. Dado que no se puede ordenar un objeto, Sort-Object
devuelve toda la colección sin cambios.
Tipo: | PSObject |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | True |
Aceptar caracteres comodín: | False |
-Property
Especifica los nombres de propiedad que Sort-Object
se usan para ordenar los objetos. Se permiten los caracteres comodín.
Los objetos se ordenan en función de los valores de propiedad. Si no especifica una propiedad, Sort-Object
ordena en función de las propiedades predeterminadas para el tipo de objeto o los propios objetos.
Use comas para separar varias propiedades. Se pueden ordenar varias propiedades en orden ascendente, orden descendente o una combinación de órdenes de ordenación. Al especificar varias propiedades, los objetos se ordenan por la primera propiedad. Si varios objetos tienen el mismo valor para la primera propiedad, esos objetos se ordenan por la segunda propiedad. Este proceso continúa hasta que no haya más propiedades especificadas o no haya grupos de objetos.
El valor del parámetro Property puede ser una propiedad calculada. Para crear una propiedad calculada, use un scriptblock o una tabla hash.
Las claves válidas para una tabla hash son las siguientes:
expression
-<string>
o<script block>
ascending
odescending
-<boolean>
Para obtener más información, consulte about_Calculated_Properties.
Tipo: | Object[] |
Posición: | 0 |
Valor predeterminado: | Default properties |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | True |
-Stable
Los objetos ordenados se entregan en el orden en que se recibieron cuando los criterios de ordenación son iguales.
Este parámetro se agregó en PowerShell v6.2.0.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Top
Especifica el número de objetos que se van a obtener desde el principio de una matriz de objetos ordenadas. Esto da como resultado una ordenación estable.
Este parámetro se introdujo en PowerShell 6.0.
Tipo: | Int32 |
Posición: | Named |
Valor predeterminado: | None |
Requerido: | True |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
-Unique
Indica que Sort-Object
elimina los duplicados y devuelve solo los miembros únicos de la colección. La primera instancia de un valor único se incluye en la salida ordenada.
Unique no distingue mayúsculas de minúsculas. Las cadenas que solo difieren por mayúsculas y minúsculas se consideran iguales. Por ejemplo, carácter y CARÁCTER.
Tipo: | SwitchParameter |
Posición: | Named |
Valor predeterminado: | All |
Requerido: | False |
Aceptar entrada de canalización: | False |
Aceptar caracteres comodín: | False |
Entradas
Puede canalizar los objetos que se van a ordenar a este cmdlet.
Salidas
Este cmdlet devuelve los objetos ordenados.
Notas
PowerShell incluye los siguientes alias para Sort-Object
:
- Windows:
sort
El Sort-Object
cmdlet ordena los objetos en función de las propiedades especificadas en el comando o las propiedades de ordenación predeterminadas para el tipo de objeto. Las propiedades de ordenación predeterminadas se definen mediante el PropertySet
denominado DefaultKeyPropertySet
en un types.ps1xml
archivo. Para obtener más información, consulte about_Types.ps1xml.
Si un objeto no tiene una de las propiedades especificadas, el valor de propiedad de ese objeto se interpreta como Sort-Object
Null y se coloca al final del criterio de ordenación.
Cuando no hay ninguna propiedad de ordenación disponible, PowerShell intenta comparar los propios objetos.
Sort-Object
usa el método Compare para cada propiedad. Si una propiedad no implementa IComparable, el cmdlet convierte el valor de propiedad en una cadena y usa el método Compare para System.String. Para obtener más información, vea Método PSObject.CompareTo(Object).
Si ordena en una propiedad enumerada como Status, Sort-Object
ordena por los valores de enumeración. Para los servicios de Windows, Stopped tiene un valor de 1 y Running tiene un valor de 4.
Stopped se ordena antes de En ejecución debido a los valores enumerados. Para obtener más información, consulte ServiceControllerStatus.
El rendimiento del algoritmo de ordenación es más lento al realizar una ordenación estable.