Le cmdlet Select-Object de PowerShell vous permet de choisir de manière transparente des objets et des propriétés à partir d’un groupe d’objets en entrée. Mais parfois, vous devez simplement en savoir plus. Le ExpandProperty est un commutateur pour Select-Object qui développe les détails concernant une propriété particulière.
Découvrez la puissance du commutateur PowerShell Expand Property (-ExpandProperty
) dans ce tutoriel guidé par des exemples.
Prérequis
Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, tout ce dont vous avez besoin est une machine Windows avec PowerShell 5.1 et supérieur. Cet article utilise une machine Windows 10 avec PowerShell 5.1.
Extraction des valeurs d’objet de propriété avec PowerShell Expand Property
Connectez-vous à votre machine Windows et lancez un terminal PowerShell. Dans cette section, vous vous familiariserez avec le cmdlet Select-Object
et son commutateur ExpandProperty
.
1. Exécutez le cmdlet Get-Service pour obtenir une liste de tous les services sur votre système. Passez la sortie au cmdlet Select-Object pour sélectionner et afficher uniquement la propriété de nom de chaque objet de service, comme illustré ci-dessous.
Vous devriez maintenant voir une seule colonne d’objets représentant une liste de noms de services sur votre système, comme dans la capture d’écran tronquée ci-dessous.

2. Exécutez la cmdlet Get-Member à la fin du précédent pipeline pour confirmer le type d’objets que select-object retourne comme ci-dessous. Savoir le type d’objet aide à écrire des fonctions ou des cmdlets pour étendre vos pipelines.
Référez-vous à la capture d’écran ci-dessous, et vous remarquerez que bien que l’option -Property renvoie ce qui semble être une liste de chaînes, ce sont les éléments sélectionnés de objets System.ServiceProcess.ServiceController.

3. Remplacez la cmdlet Get-Members par mkdir pour créer automatiquement un dossier pour chaque service. L’option -first 5 limite le nombre d’objets à retourner. À son tour, la fonction mkdir ne créera que cinq dossiers en fonction des objets dans le pipeline.
Vous devriez voir une sortie similaire à la capture d’écran ci-dessous, indiquant la tentative réussie.

4. Supprimez les dossiers en remplaçant mkdir par rmdir comme dans l’extrait ci-dessous. Activez l’option -Verbose pour afficher une sortie détaillée dans votre terminal.
Le cmdlet rmdir attend des chaînes de caractères et ne peut pas gérer la représentation hashtable des objets ServiceController. Votre tentative devrait échouer avec plusieurs erreurs, comme sur la capture d’écran ci-dessous.

5. Changez l’interrupteur -Property par l’interrupteur -ExpandProperty comme dans l’extrait suivant. Cela vous permet d’obtenir la valeur d’une propriété en tant que chaîne de caractères lorsque tout ce dont vous avez besoin est une chaîne de caractères.
Combiné avec rmdir, vous devriez voir votre tentative de suppression automatique des dossiers réussir sans erreurs, comme sur la capture d’écran ci-dessous.

Créer un Ensemble d’Objets Sélectionnés avec des Propriétés Spécifiques
Pour raccourcir les extraits de code dans les sections, créez une variable pour les 20 premiers services sur votre machine comme suit.
Exécutez la commande Get-Service
, sélectionnez les 20 premiers objets via le cmdlet Select-Object
, et stockez les objets dans une variable nommée $testServices
. Sélectionnez uniquement les propriétés Name
, Status
, et DependentServices
comme suit.
L’interrupteur PowerShell Expand Property ne peut étendre qu’une propriété à la fois, contrairement à l’interrupteur Property, qui peut sélectionner plusieurs propriétés simultanément.
Exécutez le nom de variable, $testServices
, pour afficher la structure de son contenu.
Vous devriez voir un tableau affichant les propriétés des services que vous avez présélectionnés, similaire à la capture d’écran ci-dessous.

Expansion d’une propriété de collection avec l’extension PowerShell
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.
Exécutez la cmdlet Select-Object
sur la variable $testServices
et développez la propriété DependentServices
de chaque service.
Étant donné que DependentServices
est une propriété de collection, la sortie est une liste des services dans toutes les collections populées, comme indiqué ci-dessous. Notez les doublons dans la liste en raison de la concaténation des résultats des DependentServices
étendus.

Combinaison de propriété avec l’extension PowerShell pour une sortie catégorisée
Maintenant, vous avez une liste de services dépendants, mais comment savoir de quel service ils dépendent ? Dans cette section, vous apprendrez à utiliser l’option -Property
pour catégoriser une propriété étendue.
Exécutez la commande ci-dessous pour catégoriser les propriétés DependentServices
par Name
.
Étant donné que les services dépendants ont déjà une propriété Name
, l’étape de catégorisation échoue, comme indiqué ci-dessous.
L’erreur ci-dessous vous indique que la liste initiale de services (dans $testServices) a déjà une propriété Name en conflit avec une propriété Name dans la propriété DependentServices étendue.

Un contournement consiste à créer des Propriétés Calculées pour renommer la propriété d’identifiant comme suit.
Enregistrez la sortie de la commande précédente modifiée pour spécifier une propriété calculée appelée Depends On comme la propriété d’identifiant dans une variable appelée $depServ. Depends on contiendra la valeur du nom de chaque service dans $testService.
Le nom de la propriété, Depends on
, a été choisi arbitrairement dans ce didacticiel et peut être toute expression de votre choix.
Passez l’objet dans $depServ
à travers Select-Object
pour sélectionner les propriétés du service dépendant Name
, Status
et Depends On
.
Vous pouvez maintenant dire quels services dépendent des services dans $testServices
, comme indiqué ci-dessous.

Combinaison de Format-List avec PowerShell Expand Property pour la Verbosité
PowerShell peut limiter les propriétés d’objet à afficher, surtout en sortie tabulaire, et la sortie de l’interrupteur -ExpandProperty
peut rencontrer le même problème. Vous pouvez afficher les propriétés étendues dans une liste plutôt que dans un tableau comme contournement.
Exécutez la cmdlet Get-Process
ci-dessous pour récupérer tous les modules
que le processus explorer
utilise. Activez l’interrupteur -ExpandProperty
pour afficher les propriétés des modules.
La sortie sur votre écran devrait ressembler à la capture d’écran suivante, automatiquement tronquée pour afficher uniquement trois propriétés.

Pipez les objets vers la cmdlet Format-List
pour afficher toutes les valeurs des objets de module dans une liste plus gérable.
Comme indiqué ci-dessous, la sortie répertorie toutes les propriétés et leurs valeurs. Vous pouvez ensuite sauvegarder les données dans un fichier ou les transmettre à une autre cmdlet pour un traitement ultérieur.

Conclusion
En parvenant jusqu’ici avec succès, vous avez vu comment tirer parti de l’interrupteur de propriété PowerShell (-ExpandProperty) de la cmdlet Select-Object. PowerShell propose une multitude de cmdlets utiles pour de nombreuses tâches courantes. Vous pouvez enrichir vos nouvelles connaissances en apprenant comment afficher rapidement des fichiers avec PowerShell Cat.
Source:
https://adamtheautomator.com/powershell-expand-property/