web-dev-qa-db-fra.com

Sélectionnez les valeurs d'une propriété sur tous les objets d'un tableau dans PowerShell.

Disons que nous avons un tableau d'objets $ objets. Disons que ces objets ont une propriété "Nom".

C'est ce que je veux faire

 $results = @()
 $objects | %{ $results += $_.Name }

Cela fonctionne, mais peut-on le faire mieux?

Si je fais quelque chose comme:

 $results = objects | select Name

$results est un tableau d'objets ayant une propriété Name. Je veux que $ results contienne un tableau de noms.

Y a-t-il un meilleur moyen?

106
Sylvain Reverdy

Je pense que vous pourrez peut-être utiliser le paramètre ExpandProperty de Select-Object.

Par exemple, pour obtenir la liste du répertoire en cours et simplement afficher la propriété Name, procédez comme suit:

ls | select -Property Name

Cela renvoie toujours des objets DirectoryInfo ou FileInfo. Vous pouvez toujours inspecter le type entrant dans le pipeline en effectuant une canalisation vers Get-Member (alias gm).

ls | select -Property Name | gm

Ainsi, pour développer l'objet correspondant à celui du type de propriété que vous consultez, vous pouvez procéder comme suit:

ls | select -ExpandProperty Name

Dans votre cas, vous pouvez simplement procéder comme suit pour qu'une variable soit un tableau de chaînes, les chaînes constituant la propriété Name:

$objects = ls | select -ExpandProperty Name
185
Scott Saad

Comme solution encore plus simple, vous pouvez simplement utiliser:

$results = $objects.Name

Ce qui devrait remplir $results avec un tableau de toutes les valeurs de propriété 'Name' des éléments de $objects.

60
rageandqq