Lorsqu’un administrateur tente d’exécuter un script .ps1 sur un poste de travail ou un serveur Windows fraîchement installé, le shell renvoie souvent une erreur bloquante liée aux restrictions de sécurité. Ce mécanisme repose sur l’Execution Policy, une fonctionnalité conçue pour empêcher le lancement involontaire de scripts malveillants ou non vérifiés.
Contrairement à une idée reçue, l’Execution Policy n’est pas une barrière de sécurité infranchissable (un utilisateur standard peut la contourner en mémoire), mais un garde-fou opérationnel contre les erreurs de manipulation.
Vérifier l’état de la politique d’exécution
Pour connaître le niveau de restriction actuellement appliqué sur votre session, ouvrez une invite PowerShell et saisissez :
Get-ExecutionPolicy
Pour obtenir une vue détaillée de tous les niveaux hiérarchiques (MachinePolicy, UserPolicy, Process, CurrentUser, LocalMachine), préférez l’argument -List :
Get-ExecutionPolicy -List
Cette vue permet d’identifier immédiatement si une restriction découle d’une directive de groupe Active Directory ou d’une configuration locale. Si une stratégie de domaine bloque vos manipulations, pensez à un Debug GPO client pour en vérifier l’application effective.
Les principaux niveaux d’Execution Policy
PowerShell propose plusieurs modes d’exécution adaptés aux différents contextes d’entreprise :
- Restricted : Aucun script ne peut être exécuté, qu’il soit local ou distant. Seules les commandes interactives tapées en direct sont autorisées (historiquement la valeur par défaut sur Windows client).
- RemoteSigned : Les scripts créés localement s’exécutent sans contrainte. En revanche, les fichiers téléchargés depuis Internet ou provenant du réseau doivent être signés numériquement par un éditeur approuvé. C’est la configuration standard sur Windows Server.
- AllSigned : Tous les scripts, locaux comme distants, doivent obligatoirement porter la signature numérique d’un certificat approuvé.
- Unrestricted : Tous les scripts tournent, mais un avertissement s’affiche avant de lancer un fichier balisé comme provenant d’Internet (identifiant de zone téléchargé).
- Bypass : Aucune vérification n’est effectuée, aucun avertissement n’est affiché. Ce mode est souvent employé pour l’automatisation temporaire ou les tâches planifiées.
- Undefined : Aucune politique n’est définie sur la portée actuelle. Si toutes les portées sont à cette valeur, le système retombe sur le mode Restricted.
Modifier la politique d’exécution
Pour modifier ce paramètre de manière persistante, lancez PowerShell en tant qu’administrateur et utilisez la commande Set-ExecutionPolicy :
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
Si vous n’avez pas de privilèges d’administrateur local, vous pouvez restreindre le changement à votre propre profil utilisateur :
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Exécuter un script sans modifier la politique globale
Pour lancer ponctuellement un script lors d’un déploiement ou d’un appel via batch sans altérer la configuration de la machine, il suffit de passer l’argument lors de l’appel du binaire :
powershell.exe -ExecutionPolicy Bypass -File C:\Scripts\maintenance.ps1
Dans le cadre de l’administration réseau à distance, veillez également à autoriser l’exécution distante des scripts powershell via WinRM afin d’orchestrer vos parcs de serveurs en toute fluidité.
