Lorsque vous travaillez avec PowerShell, il arrive parfois que vous ayez besoin de manipuler des ensembles de données. Nous travaillons avec de nombreux fichiers, comptes d’utilisateurs, machines virtuelles, et plus encore. Lorsque vous affichez ces différents objets dans la console, ils défilent à l’écran les uns après les autres sans se soucier de la manière dont vous aimeriez les voir. Mais cela peut être corrigé ! En utilisant la cmdlet Group-Object
de PowerShell, vous pouvez regrouper des objets ensemble. Cette cmdlet agit comme la déclaration GROUP BY de SQL.
PowerShell a une façon de résumer les objets par leurs propriétés grâce à la cmdlet Powershell Group Object. Cette cmdlet permet au scripteur d’avoir une vue d’ensemble des propriétés de nombreux objets à la fois par groupes.
Créons un tas d’objets du même type. Ces objets peuvent être de n’importe quel type. Cependant, pour cette démonstration, j’utiliserai des objets System.ServiceProcess.ServiceController que la cmdlet Get-Service
retourne.
Pour que Group-Object fonctionne comme prévu, assurez-vous de regrouper uniquement des objets du même type. Il est important que tous les objets aient les mêmes propriétés.
Gérez et rappelez-vous de l’Active Directory, d’Exchange et de Microsoft 365 avec ManageEngine ADManager Plus. Téléchargez l’essai gratuit !
Group-Object sans paramètres
Get-Service
renvoie tous les services sur ma machine locale. Comme il y a beaucoup de services ici, je ne peux pas avoir une idée de leur état, de leur type de démarrage et plus encore. J’aimerais d’abord regrouper ces services par leur état. Pour regrouper ces services, je vais envoyer tous les objets de service à la commande Group-Object
de PowerShell et utiliser la propriété Status
.
Remarquez qu’en envoyant tous les services à Powershell Group Object
, vous pouvez obtenir le décompte. C’est un gros avantage mais utile.
Regroupement d’objets par une seule propriété
Pour les regrouper par une propriété spécifique (statut dans ce cas), je dois indiquer à Group-Object
que je veux regrouper selon une propriété d’objet particulière. Cela se fait en utilisant le paramètre Property
sur Group-Object
.
Maintenant, on parle! Je peux maintenant voir combien de services sont arrêtés et en cours d’exécution en même temps. Je peux faire la même chose pour StartType
également.
Filtrage de la sortie de Group-Object
Peut-être que je veux plonger et voir les services réels dans un ou plusieurs de ces groupes. Je peux obtenir ces objets en regardant la propriété Group
renvoyée par la commande d’objet de groupe PowerShell. L’objet Group
contient tous les services regroupés par la valeur de la propriété d’objet. Pour obtenir tous les services arrêtés si je regroupe selon l’état du service, je peux filtrer les services par l’état Stopped
et ensuite étendre l’objet Group
pour voir tous ces services.
Regroupement d’objets par plusieurs propriétés
Pas seulement vous pouvez regrouper des objets de cette manière sur une seule propriété, mais vous pouvez également les regrouper sur plusieurs propriétés. Peut-être aimeriez-vous voir tous les services en fonction de leur statut et de leur type de démarrage. Pour ce faire, il me suffit d’ajouter un autre nom de propriété au paramètre Property
de la commande Group-Object
.
Vous pouvez voir qu’en ajoutant une propriété supplémentaire, vous pouvez essentiellement créer une multitude de scénarios « et » et regrouper autant de propriétés que nécessaire!
Gérez et rapportez l’Active Directory, Exchange et Microsoft 365 avec ManageEngine ADManager Plus. Téléchargez l’essai gratuit!
Résumé
La cmdlet Group-Object
est une commande qui vous aide à regrouper des objets similaires en fonction d’une propriété commune. Regrouper des objets de cette manière est utile de plusieurs façons. J’espère qu’en apprenant un peu comment fonctionne la cmdlet Group-Object
, vous aurez plus d’idées sur la manière d’améliorer et de créer de meilleurs scripts PowerShell!
Si vous débutez avec PowerShell, je vous encourage vivement à consulter mon mini-cours sur la création d’outils PowerShell!
Source:
https://adamtheautomator.com/powershell-group-object/