Introduction au code PowerShell
PowerShell est un framework d'automatisation et un interpréteur de commandes développé par Microsoft. Conçu à l'origine sous le nom de code Monad en 2003, il a été officiellement lancé en 2006 sous le nom de Windows PowerShell. Il repose sur le framework .NET et permet aux administrateurs système et aux développeurs d'automatiser des tâches répétitives via des scripts. En 2016, Microsoft a ouvert le code source de PowerShell sous licence MIT, ce qui a donné naissance à PowerShell Core, une version multiplateforme compatible avec Windows, Linux et macOS. Aujourd'hui, PowerShell est un outil essentiel pour la gestion des systèmes d'exploitation, des services cloud et des infrastructures Active Directory.
PowerShell se distingue des interpréteurs de commandes traditionnels par sa capacité à manipuler des objets plutôt que du texte brut. Chaque cmdlet, acronyme de command-let, produit des objets .NET qui peuvent être passés dans un pipeline, transformés, filtrés ou exportés. Cette approche orientée objet offre une flexibilité et une puissance très supérieures aux shells classiques. La documentation officielle de Microsoft fournit une vue d'ensemble complète des capacités de PowerShell.

Syntaxe et concepts fondamentaux
PowerShell utilise un langage de script inspiré des langages de programmation modernes. Les commandes de base sont les cmdlets, dont le nom suit la convention Verbe-Nom, par exemple Get-Help, Set-Location, Remove-Item. Les verbes sont normalisés pour garantir la cohérence (Get, Set, New, Remove, Invoke, etc.). La syntaxe inclut des paramètres nommés, des commutateurs et des valeurs. Les pipelines sont définis par le symbole | et permettent de chaîner plusieurs commandes en une seule ligne : par exemple Get-Process | Where-Object {$_.CPU -gt 10} affiche les processus utilisant plus de 10 % de CPU.
Les variables en PowerShell sont préfixées par le signe $, comme $processus ou $date. Les types sont dynamiques mais peuvent être explicitement déclarés. Les structures de contrôle incluent les boucles for, foreach, while et les instructions conditionnelles if, else if, else et switch. PowerShell supporte également les fonctions, les modules et les scripts sauvegardés avec l'extension .ps1. Pour sécuriser l'exécution des scripts, le moteur intègre des politiques d'exécution (Execution Policy) qui limitent les scripts autorisés.

Voici une liste non exhaustive des cmdlets les plus couramment utilisés :
- Get-Service : récupère l'état des services Windows.
- Get-Process : liste les processus en cours.
- Set-Location : change le répertoire courant, équivalent de cd.
- Get-EventLog : accède aux journaux d'événements système.
- Get-ADUser : interroge les utilisateurs d'Active Directory.
- Get-ADComputer : interroge les ordinateurs du domaine.
- Set-ExecutionPolicy : configure la politique d'exécution des scripts.
- New-Item : crée un fichier ou un dossier.
- Remove-Item : supprime un élément.
- Get-Help : affiche l'aide intégrée des cmdlets.
Ces cmdlets sont la base de tout script PowerShell. Leur maîtrise permet d'écrire des automatisations efficaces pour la gestion quotidienne des systèmes.

Exemples pratiques de scripts PowerShell
Un cas d'usage fréquent en entreprise est le suivi des comptes utilisateurs créés récemment dans Active Directory. Grâce au module ActiveDirectory, on peut récupérer ces informations avec une simple requête. Le script ci-dessous affiche les utilisateurs créés au cours des sept derniers jours :
$Fecha = (Get-Date).AddDays(-7)
Get-ADUser -Filter {whenCreated -ge $Fecha} -Properties Name,Enabled,whenCreated

Ce script utilise la cmdlet Get-Date pour obtenir la date actuelle, puis soustrait sept jours. Le filtre sur l'attribut whenCreated permet de ne conserver que les utilisateurs dont la date de création est postérieure ou égale à cette limite. Les propriétés Name, Enabled et whenCreated sont explicitement demandées. Pour exécuter ce script, il faut avoir les droits appropriés sur le domaine et importer le module Active Directory via Import-Module ActiveDirectory. La politique d'exécution doit être au moins fixée à RemoteSigned.
Un autre exemple classique est l'arrêt ou le redémarrage d'un service à distance. La cmdlet Invoke-Command permet d'exécuter des blocs de script sur des machines distantes en utilisant WinRM. Par exemple : Invoke-Command -ComputerName SRV01 -ScriptBlock {Restart-Service -Name Spooler} redémarre le service d'impression sur SRV01. Ces techniques sont essentielles pour l'administration centralisée.

Le tableau suivant résume quelques cmdlets courantes avec leur description et un exemple d'utilisation :
| Cmdlet | Description | Exemple simple |
|---|---|---|
| Get-Process | Liste les processus en cours | Get-Process -Name notepad |
| Set-Location | Change le répertoire de travail | Set-Location C:\Windows |
| Get-Service | Affiche l'état des services | Get-Service -Name bits |
| Get-EventLog | Lit les journaux d'événements | Get-EventLog -LogName System -Newest 5 |
| Get-ADUser | Recherche des utilisateurs AD | Get-ADUser -Identity jdupont |
| Set-ExecutionPolicy | Modifie la sécurité d'exécution | Set-ExecutionPolicy RemoteSigned |
| New-Item | Crée un fichier ou dossier | New-Item -Path .\test.txt -ItemType File |
| Remove-Item | Supprime un élément | Remove-Item .\temp\*.log |
| Get-Help | Affiche l'aide d'une cmdlet | Get-Help Get-Process -Detailed |
Ces exemples illustrent la puissance de PowerShell pour manipuler l'environnement Windows et Active Directory. Pour approfondir, la page GitHub officielle de PowerShell propose la documentation technique, le code source et les contributions de la communauté.
Gestion de la sécurité avec les politiques d'exécution
Par défaut, Windows interdit l'exécution des scripts PowerShell pour prévenir les attaques malveillantes. La commande Set-ExecutionPolicy permet de définir le niveau de confiance. Les principales politiques sont : Restricted (aucun script autorisé), AllSigned (scripts signés par un éditeur de confiance), RemoteSigned (scripts téléchargés doivent être signés, scripts locaux autorisés) et Unrestricted (tous les scripts autorisés). Pour un poste de travail administrateur, RemoteSigned est un bon compromis. En entreprise, on utilise souvent AllSigned pour garantir l'intégrité.
Il est important de noter que la politique d'exécution n'est pas un verrou de sécurité infranchissable, mais une protection contre les exécutions accidentelles. Les administrateurs peuvent outrepasser cette politique en passant le paramètre -ExecutionPolicy Bypass lors du lancement d'un script, ou en utilisant la stratégie de groupe pour déployer une configuration centralisée. PowerShell Core, quant à lui, utilise des mécanismes similaires mais adaptés aux systèmes Linux.
La gestion des sessions à distance est également sécurisée par WinRM (Windows Remote Management) et nécessite une configuration appropriée (Enable-PSRemoting). Les identifiants peuvent être passés en toute sécurité via des objets PSCredential. L'utilisation de certificats et de modules comme Posh-SSH permet de gérer des hôtes non Windows.
Références
Les informations de cet article proviennent des sources suivantes :
Microsoft Learn. PowerShell Overview. https://learn.microsoft.com/es-es/powershell/
Microsoft Learn. Scripting Language Specification. https://learn.microsoft.com/es-es/powershell/scripting/lang-spec/
IONOS. Top 40 PowerShell Cmdlets. https://www.ionos.es/digitalguide/servidores/configuracion/comandos-de-powershell/
Wikipedia. PowerShell. https://es.wikipedia.org/wiki/PowerShell
GitHub. PowerShell Repository. https://github.com/PowerShell/PowerShell





