Seleccione los valores de una propiedad en todos los objetos de una matriz en PowerShell
Digamos que tenemos una matriz de objetos $objetos. Digamos que estos objetos tienen una propiedad "Nombre".
Esto es lo que quiero hacer
$results = @()
$objects | %{ $results += $_.Name }
Esto funciona, pero ¿se puede hacer de mejor manera?
Si hago algo como:
$results = objects | select Name
$results
es una matriz de objetos que tienen una propiedad Nombre. Quiero que $results contenga una serie de nombres.
¿Existe una mejor manera?
Creo que podrías utilizar el ExpandProperty
parámetro de Select-Object
.
Por ejemplo, para obtener la lista del directorio actual y solo mostrar la propiedad Nombre, se haría lo siguiente:
ls | select -Property Name
Esto todavía devuelve objetos DirectoryInfo o FileInfo. Siempre puede inspeccionar el tipo que llega a través de la canalización mediante la conexión a Get-Member (alias gm
).
ls | select -Property Name | gm
Entonces, para expandir el objeto para que sea del tipo de propiedad que estás viendo, puedes hacer lo siguiente:
ls | select -ExpandProperty Name
En su caso, puede hacer lo siguiente para que una variable sea una matriz de cadenas, donde las cadenas son la propiedad Nombre:
$objects = ls | select -ExpandProperty Name
Como solución aún más sencilla, podrías utilizar:
$results = $objects.Name
Que debería llenarse $results
con una matriz de todos los valores de propiedad 'Nombre' de los elementos en $objects
.