PowerShell Select-Object Hecho Simple: Guía para Principiantes

PowerShell es una herramienta potente para gestionar datos, pero generalmente proporciona demasiada información de una vez. Como sabes, un exceso de información puede resultar abrumador y difícil de analizar. Sin embargo, no te preocupes. El cmdlet PowerShell Select-Object será útil.

En este tutorial, aprenderás los conceptos básicos del cmdlet Select-Object para filtrar o reducir resultados de muchas maneras diferentes.

Sigue leyendo ¡y comienza la gestión de datos sin dolor!

Prerrequisitos

Este tutorial incluye demostraciones prácticas. Para seguirlo, asegúrate de tener un sistema con PowerShell instalado. Este tutorial utiliza Windows 10 con PowerShell 7, pero cualquier versión moderna debería funcionar también.

¿Qué es el cmdlet Select-Object de PowerShell?

El cmdlet Select-Object simplifica la gestión de datos al permitirte seleccionar propiedades específicas de un objeto o conjunto de datos. Al mismo tiempo, puedes cambiar el nombre de las propiedades o crear propiedades calculadas basadas en las existentes.

La sintaxis básica de Select-Object es la siguiente donde:

Parameter Function
-InputObject Specifies the object or data set you want to work with, which can be an object, an array of objects, or an output of another cmdlet.
Property Specifies the property or properties to select from the InputObject parameter. You can specify multiple properties separated by commas.
Optional Parameters Allows you to refine your selection, such as selecting a certain number of objects or skipping objects.
Select-Object [-InputObject] [Property] [Optional Parameters]

Seleccionar objetos por propiedades

Dado que se necesita más que una breve introducción para satisfacer tu deseo de aprender sobre el cmdlet Select-Object, ¿por qué no comenzar con uno de sus casos de uso comunes? Inicia este tutorial seleccionando una propiedad específica de un objeto con el cmdlet Select-Object.

Supongamos que tienes una lista de procesos en ejecución en tu computadora, pero solo deseas ver los nombres de cada proceso. Especificar la propiedad Name al cmdlet Select-Object hará el truco.

Abre PowerShell y ejecuta el siguiente comando Get-Process para recuperar e imprimir una lista de todos los procesos solo (Select-Object) por Name.

Get-Process | Select-Object Name
Selecting objects by property

Además de los procesos en ejecución, el cmdlet Select-Object te permite trabajar en un archivo CSV. Supongamos que tienes un archivo CSV con muchas columnas pero solo necesitas algunas de ellas. En ese caso, permite que el cmdlet Select-Object elija solo las columnas relevantes para que puedas manipular y analizar los datos.

Ahora, ejecuta el siguiente comando para seleccionar múltiples propiedades (`Select-Object`): `Name` y `CPU` (separadas por comas). Esta función ayuda cuando trabajas con conjuntos de datos grandes donde solo necesitas algunas propiedades de cada objeto.

Además, este comando también ordena la lista de objetos (`Sort-Object`) en orden `-Descending` con la propiedad `CPU` como referencia.

Get-Process | Select-Object Name, CPU | Sort-Object -Descending CPU

A continuación, puedes ver los procesos listados, comenzando por el más consumidor de recursos, Google Chrome (si lo tienes instalado).

Selecting multiple properties

Creación de una propiedad calculada

Cuando busques propiedades que se ajusten mejor a tus necesidades, considera crear una propiedad calculada. ¿Por qué? Las propiedades calculadas te permiten manipular y transformar datos, combinar propiedades existentes, realizar operaciones matemáticas o formatear datos de una manera específica.

Para crear una propiedad calculada, debes especificar un nombre de nueva propiedad y una expresión que defina cómo calcular el valor de la propiedad:

Ejecuta el comando a continuación para realizar lo siguiente:

  • Recuperar una lista de procesos en ejecución (`Get-Process`), seleccionando solo (`Select-Object`) las propiedades `Name` y `CPU`.
  • Cree una nueva propiedad calculada con el Nombre Memoria (MB), que calcula el uso de memoria de cada proceso en megabytes. El uso de memoria se calcula utilizando una Expresión que divide la propiedad WorkingSet por 1MB. Cualquier expresión válida de PowerShell funciona para crear una propiedad calculada.
  • Imprime todos los procesos en ejecución recuperados en orden -Descendente según la propiedad calculada Memoria (MB).
Get-Process | Select-Object Name, CPU, @{Name="Memory (MB)";Expression={$_.WorkingSet/1MB}} | Sort-Object -Descending "Memory (MB)"
Creating a calculated property

Excluyendo una Propiedad Específica

En la vida real, los resultados de un comando Select-Object pueden contener información sensible, como nombres de usuario y contraseñas. ¿Cómo evitar este riesgo?

Para evitar que se muestren datos sensibles en la salida, agregue el parámetro -ExcludeProperty para excluir una propiedad específica de la salida.

Ejecute el siguiente comando para realizar las siguientes tareas:

  • Recuperar una lista de todos los archivos y carpetas (Get-ChildItem) en el directorio C:\\ de forma recursiva (-Recurse).
  • Pase la salida al cmdlet Select-Object para seleccionar las propiedades Name, Length y LastWriteTime.
  • Excluya (-ExcludeProperty) la propiedad FullName de la salida. Al hacerlo, se evita que se muestren las rutas completas en la salida, lo que puede contener información confidencial.
Get-ChildItem -Path C:\ -Recurse | Select-Object Name, Length, LastWriteTime -ExcludeProperty FullName
Excluding a specified property

Saltear el primer o último número de objetos

Cuando se trabaja con conjuntos de datos masivos, encontrar los datos que necesita puede ser como buscar un diamante en una mina de carbón. Pero ¿por qué perder tiempo filtrando datos irrelevantes?

En PowerShell, el cmdlet Select-Object proporciona dos parámetros que le permiten excluir el primer (-Skip) y último (-SkipLast) número de objetos en la salida, respectivamente.

Para ver cómo funciona omitir varios objetos de una salida:

Ejecute el siguiente comando para obtener todos los procesos en ejecución (Get-Process) pero -Skip los primeros 100 objetos devueltos.

Tenga en cuenta que el número de objetos omitidos se basa en valores enteros (números positivos y enteros sin puntos decimales), que en este caso es 100.

Get-Process | Select-Object -Skip 100
Skipping the first 100 objects

Ahora, ejecute el siguiente comando para obtener una lista de los contenidos del directorio de trabajo (Get-ChildItem) pero omita los últimos (-SkipLast) 100 objetos devueltos.

Get-ChildItem | Select-Object -SkipLast 100
Skipping the last 100 objects

Seleccionar el Primer o Último Número de Objetos

Además de saltar el primer y último número de objetos, también puedes estar interesado en seleccionar el primer y último número de objetos en su lugar. El cmdlet Select-Object admite esta función con los parámetros First y Last que te permiten omitir todo lo demás para ahorrar tiempo y recursos.

Ejecuta el siguiente comando para obtener todos los procesos pero solo selecciona (Select-Object) los primeros -First 10 objetos devueltos.

Get-Process | Select-Object -First 10
Selecting the first 10 objects returned

Ahora, ejecuta el comando a continuación para obtener todos los contenidos del directorio de trabajo (Get-ChildItem) pero solo selecciona (Select-Object) los últimos -Last 10 objetos devueltos.

Get-ChildItem | Select-Object -Last 10
Selecting the last 10 objects returned

Seleccionando objetos únicos exclusivamente

A medida que trabajas con conjuntos de datos más grandes, encontrarás valores duplicados que puedes querer excluir de la salida, lo cual es típico. Pero lo bueno del cmdlet Select-Object es que no tienes que excluir los valores duplicados manualmente.

Al agregar el parámetro -Unique, puedes seleccionar solo los objetos únicos de la salida, optimizando tu análisis y mejorando la precisión de tus resultados.

Ejecuta el comando a continuación para seleccionar (Select-Object) y devolver los primeros -First 2 objetos.

"1","1","2","3" | Select-Object -First 2

A continuación, puedes ver dos objetos devueltos independientemente de si el otro es un valor duplicado.

Selecting and returning objects with duplicate values

Por último, ejecuta el siguiente comando para devolver solo un valor -Unique para cada uno de los -First 2 objetos seleccionados.

"1","1","2","3" | Select-Object -First 2 -Unique

Esta vez, puedes ver solo uno devuelto de los primeros dos objetos seleccionados, ya que el otro es simplemente un valor duplicado. Como te das cuenta, esta salida demuestra que el parámetro -Unique es útil para descartar rápidamente cualquier objeto duplicado en tus datos.

Selecting unique objects exclusively

Conclusión

PowerShell tiende a producir una sobrecarga de información. Pero en este tutorial, aprendiste cómo el cmdlet Select-Object de PowerShell ayuda a simplificar tus datos para ver solo la información necesaria.

Has visto cómo diferentes parámetros te permiten seleccionar y excluir datos, especialmente valores duplicados de una salida. Con el cmdlet Select-Object, gestionar grandes cantidades de datos no tiene por qué ser una tarea desalentadora.

En este punto, puedes refinar rápidamente tus resultados para que sean más adecuados para el análisis y la solución de problemas. ¿Por qué no aprender cómo formatear tus propiedades calculadas a continuación para mejorar la legibilidad y la usabilidad?

Source:
https://adamtheautomator.com/powershell-select-object/