1. Livres & vidéos
  2. PowerShell, Active Directory et Entra ID
  3. Les composants de PowerShell
Extrait - PowerShell, Active Directory et Entra ID Automatiser la gestion des identités et des accès
Extraits du livre
PowerShell, Active Directory et Entra ID Automatiser la gestion des identités et des accès Revenir à la page d'achat du livre

Les composants de PowerShell

Définition

PowerShell est un interpréteur de commandes et un langage de script puissant conçu par Microsoft pour l’automatisation des tâches d’administration système. Il s’appuie sur le framework .NET et se compose de plusieurs éléments fondamentaux qui interagissent pour permettre la création de scripts complexes. Ce chapitre donne une explication détaillée de ses principaux composants avec des exemples.

Les variables

Les variables dans PowerShell sont utilisées pour stocker des valeurs ou des objets. Elles commencent toujours par le signe $ suivi du nom de la variable. Elles sont non typées par défaut, ce qui signifie qu’elles peuvent contenir différents types de données (chaînes de caractères, nombres entiers, objets, etc.) sans déclaration explicite du type.

Exemple 1 : variable simple

$nom = "Alice" 
$age = 30 
Write-Host "Bonjour, je m'appelle $nom et j'ai $age ans." 
  

Exemple 2 : variable contenant un objet

Ici, la variable $services stocke une collection d’objets ServiceController renvoyée par la commande Get-Service.

$services = Get-Service 
 
$services | Out-GridView 
  

Les cmdlets

Les cmdlets (prononcées « command-lets ») sont des commandes natives de PowerShell. Elles sont construites sur le framework .NET et suivent une convention de nommage standardisée de type verbe-nom. Cette approche cohérente facilite l’apprentissage et la prévisibilité. Les cmdlets traitent et renvoient des objets structurés, ce qui permet l’utilisation du pipeline pour enchaîner les commandes.

Exemple 1 : cette cmdlet récupère les processus en cours d’exécution

PS C:\> Get-Process  

Exemple 2 : cette cmdlet démarre un service

PS C:\> Start-Service  

Exemple 3 : cette cmdlet lit le contenu d’un fichier liste.txt

PS C:\> Get-Content -Path "C:\Temp\liste.txt"  

Exemple 4 : utilisation du pipeline

Cette cmdlet récupère l’objet du processus "notepad" et le transmet (via le pipeline |) à la cmdlet Stop-Process pour l’arrêter.

PS C:\> Get-Process -Name "notepad" | Stop-Process   

Les cmdlets PowerShell constituent un outil essentiel pour l’administration, le dépannage, l’automatisation et la sécurisation des systèmes d’information. Elles interviennent dans de nombreux domaines, notamment l’administration d’Active Directory, de MECM/SCCM, des infrastructures réseau, de la sécurité, de l’inventaire matériel, du diagnostic système, ainsi que des services Microsoft 365 tels qu’Exchange Online, SharePoint Online, Teams, Intune et Entra ID. Elles sont également largement utilisées pour l’administration à distance, l’automatisation des tâches, la gestion des infrastructures virtualisées, notamment avec Nutanix AHV, et les opérations de sauvegarde.

Dans les sections suivantes, nous examinerons en détail des cmdlets couramment utilisées. Les cmdlets présentées dans ce chapitre ne constituent toutefois pas une liste exhaustive ; elles ont été sélectionnées pour leur utilité et leur fréquence d’utilisation dans les tâches d’administration quotidiennes.

1. Administration d’Active Directory

a. Afficher les utilisateurs

La cmdlet Get-ADUser permet...

Les itérations

Les structures d’itération permettent de répéter l’exécution d’un ensemble d’instructions selon un nombre défini de répétitions, sur une collection d’objets ou tant qu’une condition est satisfaite. PowerShell met à disposition plusieurs mécanismes d’itération, notamment ForEach-Object, ForEachFor, While, Do-While et Do-Until, chacun répondant à des besoins spécifiques en matière de traitement et d’automatisation.

Seules les structures ForEach-Object et ForEach, les plus couramment utilisées dans les scripts d’administration, seront présentées. Elles permettent de parcourir efficacement des collections d’objets et constituent les mécanismes d’itération les plus fréquemment employés dans les traitements PowerShell.

1. L’itération avec ForEach-Object

La cmdlet ForEach-Object permet d’exécuter un bloc d’instructions sur chaque objet reçu via le pipeline. Elle constitue l’un des mécanismes d’itération les plus utilisés en PowerShell, car elle s’intègre naturellement au pipeline et permet de traiter les objets les uns après les autres sans qu’il soit nécessaire de les stocker préalablement dans une variable.

Au sein du bloc d’instructions, l’objet en cours de traitement est accessible au moyen de la variable automatique $_ (ou $PSItem), qui représente l’élément transmis par le pipeline.

Syntaxe

ForEach-Object 
    [-Process] <ScriptBlock[]> 
    [-Begin <ScriptBlock>] 
    [-End <ScriptBlock>] 
    [<CommonParameters>]...

Les fonctions

Les fonctions sont des blocs d’instructions réutilisables permettant de regrouper un ensemble de traitements sous un nom unique. Elles peuvent accepter des paramètres en entrée et retourner une ou plusieurs valeurs. En favorisant la modularité du code, elles facilitent la conception, la maintenance et la réutilisation des scripts PowerShell, tout en limitant la duplication des instructions. Une fonction est définie à l’aide du mot-clé function.

Les commandes ou les portions de script appelées à être utilisées de manière répétitive constituent d’excellents candidats à la création de fonctions. Cette approche permet de centraliser le code, de simplifier les évolutions et de réduire les risques d’erreur lors des opérations de maintenance.

Il est recommandé de privilégier l’écriture de fonctions plutôt que l’accumulation de commandes directement dans les scripts. Les fonctions peuvent être regroupées au sein d’un module PowerShell, facilitant ainsi leur organisation et leur réutilisation. Lorsqu’un module est placé dans l’un des répertoires référencés par la variable d’environnement $env:PSModulePath, ses fonctions deviennent directement accessibles sans qu’il soit nécessaire de préciser leur emplacement.

Le module PowerShellGet simplifie également le partage et la distribution de modules via un référentiel NuGet, favorisant ainsi la mutualisation des développements et la standardisation des outils d’administration. Ce module est intégré à partir de PowerShell 5.0 et peut également être installé sur les versions 3.0 et ultérieures.

L’écriture de fonctions doit respecter les bonnes pratiques de développement. Il est notamment conseillé d’éviter l’utilisation d’alias et de paramètres positionnels dans un code destiné à être partagé ou maintenu, afin d’en améliorer la lisibilité. De même, les valeurs codées en dur doivent être remplacées, autant que possible, par des paramètres ou des variables, afin de rendre les fonctions...

Les modules

Les modules PowerShell constituent des ensembles regroupant des cmdlets, des fonctions, des variables ainsi que d’autres ressources, pouvant être importées dans une session PowerShell. Ils permettent de structurer le code, d’en faciliter la réutilisation et d’en simplifier la distribution au sein d’environnements d’administration.

Une grande partie des fonctionnalités de PowerShell est fournie sous forme de modules. À titre d’exemple, le module CimCmdlets propose des cmdlets dédiée à la gestion des objets CIM (Common Information Model).

Exemple 1 : affichage des modules installés

L’exemple suivant illustre la commande permettant de lister les modules installés sur un système.

PS C:\> Get-Module -ListAvailable 

Exemple 2 : importer un module

     PS C:\> Import-Module -Name " ActiveDirectory" 

Une fois le module importé, ses cmdlets deviennent immédiatement disponibles dans la session PowerShell. À titre d’exemple, la cmdlet Get-ADDomainpeut alors être utilisée directement pour obtenir des informations sur un domaine Active Directory Domain Services (AD DS), notamment son nom DNS, son identificateur de sécurité (SID), les détenteurs des rôles FSMO (Flexible Single Master Operations) ainsi que les conteneurs par défaut associés au domaine.

Dans un contexte d’administration, les scripts ou commandes fréquemment utilisés en ligne de commande ont intérêt à être transformés en outils réutilisables. Leur regroupement au sein d’un module de script permet de structurer le code de manière cohérente, de lui conférer une meilleure lisibilité et de le rendre plus facile à maintenir. Cette approche facilite également le partage et la distribution des fonctions entre administrateurs, tout en améliorant leur intégration dans des environnements de production.

1. Fonctions de type « dot sourcing »

Lorsqu’une fonction est définie dans un script sans être intégrée à un module PowerShell, son chargement en mémoire nécessite l’utilisation du mécanisme de dot-sourcing. Cette technique consiste...