Skip to content

Introduction

PowerShell est un outil en ligne de commande et un langage de script de Microsoft, conçu pour automatiser des tâches et administrer efficacement des systèmes.

Objectifs

À la fin de ce chapitre, vous serez capable de :

  • Expliquer l’utilité de PowerShell et son historique.
  • Identifier les principales versions et leurs différences.
  • Préparer un environnement de travail (VM, policy d’exécution, éditeur).

Historique

  • Avant PowerShell, l’automatisation sous Windows reposait surtout sur les fichiers Batch (.bat, .cmd) exécutés dans command.com sous MS-DOS puis cmd.exe sous Windows.
  • Ces scripts permettaient d’enchaîner des commandes, mais restaient plus limités que les shells Unix/Linux comme Bash.
  • En 2002–2003, Microsoft lance le projet Monad, qui deviendra plus tard Windows PowerShell : un shell et un langage de script orientés administration système.
  • En 2006, PowerShell 1.0 est publié officiellement. Il introduit une approche plus moderne que les fichiers Batch, avec des cmdlets, des objets et un pipeline orienté objets.
  • En 2009, Windows 7 intègre nativement Windows PowerShell 2.0, qui apporte notamment l’exécution distante, les jobs en arrière-plan et de nombreuses améliorations pour l’administration.
  • Par la suite, PowerShell évolue jusqu’à Windows PowerShell 5.1, qui reste la version Windows historique encore présente par défaut sur de nombreux systèmes Windows.
  • À partir de PowerShell 6, le projet devient open source, basé sur .NET Core, et devient multiplateforme : Windows, macOS et Linux.
  • Aujourd’hui, la branche moderne est PowerShell 7, installée séparément de Windows PowerShell 5.1 (powershell.exe) et conçue pour coexister avec elle. La documentation Microsoft référence actuellement PowerShell 7.5 (pwsh.exe) comme version stable récente.

Utilité

Automatisation de tâches et procédures en utilisant des scripts.

  • Gain de temps
  • Minimisation des erreurs

Exemples d'utilisation :

  • Création/suppression de comptes utilisateurs
  • Modification et copie de fichiers d'un serveur à un autre pour les intégrer dans une GED
  • Surveillance de services, d'espaces disques, process,... avec envoi d'emails/alertes
  • Configuration d'un serveur sans interface graphique
  • Collecte de données ou administration sur des machines physiques distantes
  • Installation de systèmes ou programmes

Définition et informations

Interface développée par Microsoft, remplaçant l'invite de commandes et ajoutant des fonctionnalités permettant d'interagir avec le système et de scripter :

  • Langage interprété et non typé
  • Outil en lignes de commandes similaire à Linux
  • Héritage du Framework.Net, version 2.0 requise au minimum
  • Orienté objets

Versions natives

  • Windows 7 et WS 2008 R2 => PowerShell 2.0
  • Windows 8 et WS 2012 => PowerShell 3.0
  • Windows 8.1 et WS 2012 R2 => PowerShell 4.0
  • Windows 10 (version initiale) => PowerShell 5.0
  • Windows 10 Anniversary Update, WS 2016, Windows 11 et WS 2022 => PowerShell 5.1

Info

PowerShell 7 n’est pas natif, il s’installe séparément et coexiste avec Windows PowerShell 5.1.

L'on peut trouver la version installée avec $PSVersionTable.PSVersion.

Sécurité d’exécution

Par défaut, l’exécution de scripts PowerShell n’est pas autorisée sur les ordinateurs clients Windows. La stratégie d’exécution par défaut est généralement Restricted, ce qui empêche le lancement des scripts .ps1. Sur Windows Server, la stratégie par défaut est en général RemoteSigned.

Les stratégies d’exécution ont pour but de réduire les risques d’exécution accidentelle de scripts malveillants. Elles ne constituent toutefois pas une protection de sécurité complète, mais plutôt un mécanisme de prévention et d’encadrement.

Parmi les stratégies les plus connues :

StratégieDescription
Restrictedaucun script n’est exécuté
RemoteSignedles scripts locaux peuvent être exécutés, mais les scripts téléchargés depuis Internet doivent être signés
AllSignedtous les scripts doivent être signés par un éditeur approuvé
Bypassaucune restriction ni avertissement
Unrestrictedles scripts peuvent s’exécuter, avec avertissement pour certains scripts téléchargés

Pour connaître la stratégie actuellement appliquée, on peut utiliser :

powershell
Get-ExecutionPolicy

Pour afficher le détail selon les différentes portées (Process, CurrentUser, LocalMachine, etc.) :

powershell
Get-ExecutionPolicy -List

Pour autoriser plus facilement l’exécution de scripts sur un poste de travail, on utilise souvent :

powershell
Set-ExecutionPolicy RemoteSigned

Cette commande modifie la stratégie d’exécution sur Windows. Selon la portée choisie, elle peut s’appliquer uniquement à l’utilisateur courant ou à l’ensemble de la machine.

Installation et préparation de la VM

Dans ce cours vous utiliser une machine virtuelle sous VirtualBox afin de pouvoir bénéficier des droits d'administration.

Info

Sélectionnez la documentation ci-dessus selon l'OS votre machine.

Windows offre 2 interfaces différentes, en 32 et 64 bits :

  • CLI (Command Line Interface) est la console en lignes de commande.

  • ISE (Integrated Scripting Environment) permet l'édition de scripts et offre la mise en couleur pour les différentes parties de la commande et les listes déroulantes.

Suite à l'abandon de la mise à jour de ISE par MS, pour coder, il est préférable d'utiliser VS Code avec l'extension PowerShell.

Configuration de Visual Studio Code pour PowerShell :

Info

La mise à jour de l'aide intégrée de PowerShell se fait avec Update-Help.

Résumé

  • PowerShell est un outil d’automatisation orienté objets.
  • Windows PowerShell 5.1 est encore présent nativement sur Windows, mais PowerShell 7 constitue la version moderne et multiplateforme.
  • L’environnement de travail (VM, policy d’exécution, éditeur) conditionne l’exécution et le développement des scripts.
  • VS Code avec l’extension PowerShell est aujourd’hui préférable à ISE pour écrire des scripts.