El cmdlet Select-Object de PowerShell te permite seleccionar de manera eficiente objetos y propiedades de un grupo de objetos de entrada. Pero a veces, necesitas conocer más. El interruptor ExpandProperty es un cambio para Select-Object que amplía los detalles sobre una propiedad específica.
Descubre el poder del interruptor PowerShell Expand Property (-ExpandProperty
) en este tutorial guiado por ejemplos.
Prerrequisitos
Este tutorial será una demostración práctica. Si quieres seguir, todo lo que necesitas es una máquina con Windows con PowerShell 5.1 o superior. Este artículo utiliza una máquina con Windows 10 y PowerShell 5.1.
Extracción de valores de objetos de propiedad con PowerShell Expand Property
Inicia sesión en tu máquina con Windows y abre una terminal de PowerShell. En esta sección, te familiarizarás con el cmdlet Select-Object
y su interruptor ExpandProperty
.
1. Ejecuta el cmdlet Get-Service para obtener una lista de todos los servicios en tu sistema. Envia la salida al cmdlet Select-Object para seleccionar y mostrar solo la propiedad de nombre de cada objeto de servicio, como se muestra a continuación.
Ahora deberías ver una única columna de objetos que representan una lista de nombres de servicios en tu sistema, como se muestra en la captura truncada a continuación.

2. Ejecute el cmdlet Get-Member al final del pipeline anterior para confirmar el tipo de objetos que devuelve select-object como se muestra a continuación. Saber el tipo de objeto ayuda a escribir funciones o cmdlets para extender sus pipelines.
Consulte la captura de pantalla a continuación y notará que aunque el interruptor -Property produce lo que parece ser una lista de cadenas, estas son la lista Seleccionada de objetos System.ServiceProcess.ServiceController.

3. Reemplace el cmdlet Get-Members con mkdir para crear automáticamente una carpeta para cada servicio. El interruptor -first 5 limita la cantidad de objetos a devolver. A su vez, la función mkdir solo creará cinco carpetas basadas en los objetos en el pipeline.
Debería ver una salida similar a la captura de pantalla a continuación, lo que indica el intento exitoso.

4. Elimine las carpetas reemplazando mkdir con rmdir como en el fragmento a continuación. Active el interruptor -Verbose para mostrar una salida detallada en su terminal.
El cmdlet rmdir espera cadenas y no puede manejar la representación de objetos ServiceController como un hashtable. Tu intento debería fallar con varios errores, como se muestra en la captura de pantalla a continuación.

5. Cambia el interruptor -Property al interruptor -ExpandProperty como en el siguiente fragmento. Al hacerlo, te permite obtener el valor de una propiedad como una cadena cuando todo lo que necesitas es una cadena.
Combinado con rmdir, deberías ver que tu intento de eliminar automáticamente las carpetas tenga éxito sin errores, como se muestra en la captura de pantalla a continuación.

Creando un conjunto de objetos seleccionados con propiedades específicas
Para acortar los fragmentos de código en las secciones, crea una variable para los primeros 20 servicios en tu máquina de la siguiente manera.
Ejecuta el comando Get-Service
, selecciona los primeros 20
objetos a través del cmdlet Select-Object
y almacena los objetos en una variable llamada $testServices
. Selecciona solo las propiedades Name
, Status
y DependentServices
de la siguiente manera.
El interruptor de propiedad Expand de PowerShell solo puede expandir una propiedad a la vez, a diferencia del interruptor de propiedad que puede seleccionar más de una propiedad simultáneamente.
Ejecute el nombre de variable, $testServices
, para ver la estructura de sus contenidos.
Debería ver una tabla que muestra las propiedades de los servicios que seleccionó, similar a la captura de pantalla a continuación.

Expandir una propiedad de colección con PowerShell Expand Property
A PowerShell object can have properties that are collections of objects, also known as collection properties. In this section, you will learn how to use PowerShell Expand Property to expand a collection property to view its members’ properties.
Ejecute el cmdlet Select-Object
en la variable $testServices
y expanda la propiedad DependentServices
de cada servicio.
Dado que DependentServices
es una propiedad de colección, la salida es una lista de los servicios en todas las colecciones pobladas, como se muestra a continuación. Observe los duplicados en la lista debido a la concatenación de resultados de la DependentServices
expandida.

Combinación de propiedad con PowerShell Expand Property para una salida categorizada
Ahora tiene una lista de servicios dependientes, pero ¿cómo sabe en qué servicio dependen? En esta sección, aprenderá a usar el interruptor -Property
para categorizar una propiedad expandida.
Ejecute el siguiente comando para categorizar las propiedades DependentServices
por Name
.
Dado que los servicios dependientes ya tienen una propiedad Name
, el paso de categorización falla, como se muestra a continuación.
El error a continuación le indica que la lista inicial de servicios (en $testServices) ya tiene una propiedad Name en conflicto con una propiedad Name en la propiedad DependentServices expandida.

Una solución alternativa es crear Propiedades Calculadas para renombrar la propiedad identificador de la siguiente manera.
Guarde la salida del comando anterior modificada para especificar una propiedad calculada llamada “Depende de” como la propiedad identificadora en una variable llamada $depServ. “Depende de” contendrá el valor del nombre para cada servicio en $testService.
El nombre de la propiedad, Depende de
, fue elegido arbitrariamente en este tutorial y puede ser cualquier expresión de su elección.
Pase el objeto en $depServ
a través de Select-Object
para seleccionar la propiedad Nombre
, Estado
y Depende de
del servicio dependiente.
Ahora puede ver qué servicios dependen de los servicios en $testServices
, como se muestra a continuación.

Combinando Format-List con PowerShell Expand Property para Verbosidad
PowerShell puede limitar qué propiedades de objeto mostrar, especialmente en la salida tabular, y la salida del interruptor -ExpandProperty
puede experimentar lo mismo. Puede mostrar las propiedades expandidas en una lista en lugar de en una tabla como solución alternativa.
Ejecute el cmdlet Get-Process
a continuación para recuperar todos los módulos
que el proceso explorer
utiliza. Active el interruptor -ExpandProperty
para mostrar las propiedades de los módulos.
La salida en su pantalla debería parecerse a la captura de pantalla siguiente, truncada automáticamente para mostrar solo tres propiedades.

Pase los objetos al cmdlet Format-List
para ver todos los valores de los objetos del módulo en una lista más manejable.
Como se muestra a continuación, la salida enumera todas las propiedades y sus valores. Puede guardar los datos en un archivo o pasarlos a otro cmdlet para su procesamiento adicional.

Conclusión
Al llegar con éxito a este punto, ha visto cómo beneficiarse del interruptor de propiedad Expand de PowerShell (-ExpandProperty) del cmdlet Select-Object. PowerShell ofrece una serie de cmdlets útiles para muchas tareas comunes. Puede aumentar sus nuevos conocimientos aprendiendo cómo mostrar archivos con PowerShell Cat rápidamente.
Source:
https://adamtheautomator.com/powershell-expand-property/