Al trabajar con PowerShell, hay momentos en los que necesitas trabajar con conjuntos de datos. Trabajamos con muchos archivos, cuentas de usuario, máquinas virtuales y más. Cuando se muestran estos diversos objetos en la consola, los objetos se desplazan hacia abajo en la pantalla uno tras otro sin tener en cuenta cómo te gustaría verlos. ¡Pero eso se puede solucionar! Usando el cmdlet Group-Object
de PowerShell, puedes agrupar objetos juntos. Este cmdlet actúa como la sentencia GROUP BY de SQL.
PowerShell tiene una forma de resumir objetos por sus propiedades a través del cmdlet Group Object de Powershell. Este cmdlet permite al scripter obtener una vista general de muchas propiedades de objetos a la vez en grupos.
Generemos un montón de objetos del mismo tipo. Estos objetos pueden ser de cualquier tipo. Sin embargo, para esta demostración, utilizaré objetos System.ServiceProcess.ServiceController que devuelve el cmdlet Get-Service
.
Para que Group-Object funcione como se espera, asegúrate de agrupar solo objetos del mismo tipo. Es importante que todos los objetos tengan las mismas propiedades.
Administra e informa sobre Active Directory, Exchange y Microsoft 365 con ManageEngine ADManager Plus. ¡Descarga la prueba gratuita!
Group-Object sin parámetros
Get-Service
devuelve todos los servicios en mi máquina local. Dado que hay muchos servicios aquí, no puedo tener una idea de su estado, tipo de inicio y más. Me gustaría agrupar estos servicios primero por su estado. Para agrupar estos servicios, enviaré todos los objetos de servicio al cmdlet Group-Object
de PowerShell y usaré la propiedad Status
.
Ten en cuenta que al enviar todos los servicios a Powershell Group Object
, puedes obtener el recuento. Gran cosa pero útil.
Agrupación de objetos por una sola propiedad
Para agruparlos por una propiedad específica (estado en este caso) necesito decirle a Group-Object
que quiero agrupar en una propiedad de objeto particular. Eso se hace usando el parámetro Property
en Group-Object
.
¡Ahora estamos hablando! Ahora puedo ver cuántos servicios están detenidos y en ejecución al mismo tiempo. Puedo hacer lo mismo para StartType
también.
Filtrando la salida de Group-Object
Tal vez quiero profundizar y ver los servicios reales en uno o más de estos grupos. Puedo obtener estos objetos mirando la propiedad Group
que devuelve el comando de objeto de grupo de Powershell. El objeto Group
contiene todos los servicios que tienen el valor de la propiedad de objeto agrupada. Para obtener todos los servicios detenidos si estoy agrupando por estado de servicio, puedo filtrar los servicios por el estado de Stopped
y luego expandir el objeto Group
para ver todos esos servicios.
Agrupando objetos por múltiples propiedades
No solo puedes agrupar objetos de esta manera en una sola propiedad, sino que también puedes agrupar en varias propiedades. Quizás te gustaría ver todos los servicios según su estado y su tipo de inicio. Para hacerlo, solo necesito agregar otro nombre de propiedad al parámetro Property
en Group-Object
.
Puedes ver que al agregar una propiedad adicional, básicamente puedes crear una serie de escenarios “y” y agrupar según tantas propiedades como sea necesario.
Administra e informa sobre Active Directory, Exchange y Microsoft 365 con ManageEngine ADManager Plus. ¡Descarga la prueba gratuita!
Resumen
El cmdlet Group-Object
es un cmdlet que te ayuda a agrupar objetos similares según una propiedad común. Agrupar objetos de esta manera es útil de muchas maneras diferentes. Espero que al aprender un poco sobre cómo funciona el cmdlet Group-Object
, obtengas más ideas sobre cómo mejorar y crear mejores scripts de PowerShell.
Si estás empezando con PowerShell, te animo a que eches un vistazo a mi mini-curso sobre la construcción de herramientas en PowerShell.
Source:
https://adamtheautomator.com/powershell-group-object/