Blog ENI : Toute la veille numérique !
💥 Un livre PAPIER acheté
= La version EN LIGNE offerte pendant 1 an !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

La gestion des objets

Qu’est-ce qu’un objet ?

PowerShell est un langage dit orienté objet.

La notion d’objet ne se visualise pas réellement dans la console ou un script. Un objet correspond à un ensemble de données qui pourront être traitées par PowerShell. Tout ce qui sera traité dans PowerShell sera analysé comme un objet.

La création d’une variable, par exemple, aura pour effet de créer un objet de type chaîne de caractères. Créons une simple variable nommée $Variable avec une valeur vide.

PS C:\Users\damien.vanrobaeys> $variable = "" 

Pour vérifier le type d’un objet, nous utiliserons la méthode GetType().

PS C:\Users\damien.vanrobaeys> $variable.gettype() 
 
IsPublic IsSerial Name     BaseType 
-------- -------- ----     -- 
True     True     String   System.Object 

La valeur BaseType nous indique donc que le type est System.Object.

Nous reviendrons dessus dans la suite du chapitre.

La structure d’un objet se compose de différents éléments :

  • type d’objet,

  • méthodes,

  • propriétés,

  • évènements.

Pour comprendre ce qu’est un objet, prenons un exemple simple du quotidien, à savoir un écran d’ordinateur.

Un écran...

Récupérer la structure d’un objet

1. Comment faire ?

En PowerShell, il est possible de lister facilement le contenu d’un objet afin d’en voir la structure de façon détaillée.

Le contenu d’un objet est également appelé membre ou member en anglais. Nous allons donc lister les cmdlets ayant le terme « member ».

PS C:\Users\damien.vanrobaeys> get-command -Name *-Member* 
 
CommandType Name 
----------- ---- 
     Cmdlet Add-Member 
     Cmdlet Get-Member 

Nous utiliserons la cmdlet Get-Member. Il est également possible d’utiliser l’alias de cette cmdlet : gm.

La cmdlet Add-Member sera étudiée dans la section Ajouter ou supprimer des propriétés de ce chapitre.

Réutilisons notre objet précédent, la variable $Variable, et utilisons la cmdlet Get-Member dessus.

images/13RI01.png

La cmdlet Get-Member nous retourne tout d’abord une valeur TypeName permettant d’indiquer le type de l’objet, ici System.String. Nous remarquons également la méthode GetType mentionnée précédemment permettant d’obtenir uniquement le type sans le reste des informations.

La sortie est tronquée car celle-ci contient beaucoup de valeurs.

Pour les exemples suivants, nous allons utiliser la cmdlet Get-Service et voir sa structure à l’aide de la cmdlet Get-Member.

$service = get-service IntuneManagementExtension...

Quelles cmdlets utiliser pour gérer les objets ?

Nous allons maintenant vérifier les cmdlets existantes pour gérer les objets. Nous allons utiliser la cmdlet Get-Command en triant sur le terme « object ».

PS C:\Users\damien.vanrobaeys> get-command *object* 
 
Name 
---- 
Compare-Object 
Group-Object 
Measure-Object 
New-Object 
Register-ObjectEvent 
Select-Object 
Sort-Object 
Tee-Object 

Utilisons la cmdlet Get-Help afin de comprendre ce que fait chacune d’elles.

Compare-Object

Ci-dessous le retour sur cette cmdlet :

PS C:\Users\damien.vanrobaeys> get-help Compare-Object 
 
NAME 
    Compare-Object 
 
SYNOPSIS 
    Compares two sets of objects. 

Group-Object

Ci-dessous le retour sur cette cmdlet :

PS C:\Users\damien.vanrobaeys> get-help Group-Object 
 
NAME 
    Group-Object 
 
SYNOPSIS 
    Groups objects that contain the same value for specified properties. 

Measure-Object

Ci-dessous le retour sur cette cmdlet :

PS C:\Users\damien.vanrobaeys> get-help Measure-Object 
 
NAME 
    Measure-Object 
 
SYNOPSIS 
    Calculates the numeric properties of objects, and the characters, 
words, and lines in string objects, such as files of text....

Filtrer les objets

1. Filtrer le contenu

Lorsque nous travaillons sur un objet contenant de nombreuses données, il est judicieux de pouvoir filtrer sur certains paramètres.

Listons par exemple l’ensemble des services à l’aide de la cmdlet Get-Service.

PS C:\Users\damien.vanrobaeys> get-service 
 
Status   Name               DisplayName 
------   ----               ----------- 
Stopped  AarSvc_243193      Agent Activation Runtime_243193 
Running  AESMService        Intel® SGX AESM 
Stopped  AJRouter           AllJoyn Router Service 
Stopped  ALG                Application Layer Gateway Service 
Running  AppIDSvc           Application Identity 
Running  Appinfo            Application Information 
Stopped  AppMgmt            Application Management 
Stopped  AppReadiness       App Readiness 
Stopped  AppVClient         Microsoft App-V Client ...

Trier des objets

Nous allons tout d’abord lister les services d’un poste à l’aide de la cmdlet Get-Service.

Le retour sera par défaut affiché dans un ordre aléatoire. Cela peut être compliqué pour rechercher un service par son nom.

La meilleure solution s’avère donc être de trier les services par ordre alphabétique ou anti-alphabétique sur la propriété DisplayName. Par défaut, l’utilisation de la cmdlet Sort-Object sans paramètre affichera le contenu dans l’ordre alphabétique.

Pour afficher dans l’ordre anti-alphabétique, il faudra ajouter le paramètre -Descending.

PS C:\Users\damien.vanrobaeys> get-service | Sort-Object -property  
displayname 
 
Status   Name               DisplayName 
------   ----               ----------- 
Stopped  AxInstSV           ActiveX Installer (AxInstSV) 
Stopped  AarSvc_18f511      Agent Activation Runtime_18f511 
Stopped  AJRouter           AllJoyn Router Service 
Stopped  AppReadiness       App...

Créer un objet

1. Création d’un objet .NET ou COM

Il existe différentes manières de créer des objets en PowerShell.

L’une d’elles permet de créer des objets .NET Framework ou COM, c’est-à-dire des types d’objets bien spécifiques et existant dans un environnement Windows.

Ces objets peuvent être très utiles au quotidien pour effectuer différentes tâches d’administration système.

a. Objets .NET

PowerShell repose majoritairement sur des objets .NET, toutes les entrées et sorties étant des objets .NET.

Le framework .NET peut être défini comme le cœur de PowerShell. Ce framework est installé par Windows généralement sous la forme d’une mise à jour Windows dite mise à jour de qualité.

La dernière version au moment de l’écriture du livre est la version 4.8.

Création d’un objet version d’un produit

Nous allons tout d’abord créer un objet simple permettant de spécifier la version d’un produit affecté dans une variable $Version.

Pour créer un objet .NET, nous utiliserons tout d’abord la cmdlet New-Object suivie du paramètre -TypeName. Dans ce paramètre, nous spécifierons le type d’objet à créer. Pour une version, le type d’objet sera System.Version. Cela donnera le résultat suivant :

PS C:\Users\damien.vanrobaeys> $Version = New-Object -TypeName  
System.Version 
PS C:\Users\damien.vanrobaeys> $version 
 
Major  Minor  Build  Revision 
-----  -----  -----  -------- 
0      0      -1     -1 

Pour spécifier la version, nous ajouterons le paramètre -ArgumentList.

PS C:\Users\damien.vanrobaeys> $Version = New-Object -TypeName  
System.Version -ArgumentList 1.0.0.1 
PS C:\Users\damien.vanrobaeys> $Version 
 
Major  Minor  Build  Revision 
-----  -----  -----  -------- 
1      0      0      1 

Création d’un objet de type chaîne de caractères...

Ajouter ou supprimer des propriétés

Nous avons précédemment créé un objet $MonObjet. Nous allons maintenant essayer de modifier et supprimer des propriétés.

1. Contenu de notre objet

Nous allons, dans un premier temps, lister le contenu de notre objet à l’aide de la cmdlet Get-Member.

PS C:\Users\Jerome> $MonObjet | Get-Member 
 
 
   TypeName: System.Management.Automation.PSCustomObject 
 
Name        MemberType   Definition 
----        ----------   ---------- 
Equals      Method       bool Equals(System.Object obj) 
GetHashCode Method       int GetHashCode() 
GetType     Method       type GetType() 
ToString    Method       string ToString() 
Auteur_1    NoteProperty string Auteur_1=Damien 
Auteur_2    NoteProperty string Auteur_2=Jerome 
Collection  NoteProperty string Collection=Ressources informatiques 
Editeur     NoteProperty string Editeur=Edition ENI 
Theme       NoteProperty string...

Comparer des objets

Il peut être très utile de comparer deux objets entre eux afin d’afficher les différences entre ceux-ci. Pour ce faire, la cmdlet à utiliser sera Compare-Object dont la syntaxe sera la suivante :

Compare-Object -ReferenceObject <Objet1> -DifferenceObject  
<Objet2> 

Les paramètres -ReferenceObject et -DifferenceObject sont optionnels.

Prenons deux objets personnalisés que nous allons comparer.

Notre premier objet sera celui que nous avons créé précédemment avec la cmdlet New-Object.

# Infos de l'objet 
$MonLivre = @{ 
    Editeur         = 'Editions ENI' 
    Collection      = 'Ressources informatiques' 
    Theme           = 'PowerShell' 
    Titre           = 'Débuter avec PowerShell' 
    Auteur_1        = 'Damien' 
    Auteur_2        = 'Jerome' 
} 
 
# Création de l'objet PowerShell 
$MonObjet = New-Object -TypeName PsObject -Property...