Vous lancez un script PowerShell (fichier .ps1) fourni par un tutoriel, un logiciel ou votre propre travail, et Windows PowerShell refuse de le charger ? Ce blocage vient de la stratégie d'exécution de PowerShell, un réglage de sécurité qui décide si les scripts peuvent s'exécuter et s'ils doivent être signés. Ce guide explique comment lire ce réglage, l'assouplir au plus petit niveau nécessaire et revenir en arrière, d'après la documentation de Microsoft.
Microsoft précise que la stratégie d'exécution n'est pas une frontière de sécurité : elle évite surtout d'exécuter un script par mégarde. Avant de modifier quoi que ce soit, assurez-vous que le script provient d'une source de confiance et lisez son contenu si vous le pouvez.
Message typique (le chemin varie selon votre script) :
Impossible de charger le fichier C:\Scripts\exemple.ps1, car l'exécution de scripts est désactivée sur ce système. Pour plus d'informations, consultez about_Execution_Policies à l'adresse https://go.microsoft.com/fwlink/?LinkID=135170.
Observer avant d'agir
| Observation | Hypothèse la plus probable | Étape |
|---|---|---|
| « l'exécution de scripts est désactivée sur ce système » | Stratégie Restricted, valeur par défaut des versions clientes de Windows dans Windows PowerShell | Étapes 1 à 3 |
| Message indiquant que le fichier n'est pas signé numériquement | Stratégie RemoteSigned et script marqué comme téléchargé depuis Internet | Étape 4 |
| Set-ExecutionPolicy indique que le réglage est défini par une stratégie de groupe, ou la valeur effective ne change pas | Réglage imposé par une stratégie de groupe (PC d'entreprise ou d'école) | Étape 5 |
| Le script fonctionne dans PowerShell 7 mais pas dans Windows PowerShell (ou l'inverse) | Valeurs par défaut différentes selon la version | Étape 1 dans chaque console |
Étape 1 : lire la stratégie d'exécution actuelle
Quand l'utiliser : toujours, avant de changer un réglage. Cette commande ne modifie rien.
Résultat attendu : si toutes les lignes indiquent Undefined, la stratégie effective est Restricted sur une version cliente de Windows : aucun script ne s'exécute. Si MachinePolicy ou UserPolicy affiche une valeur, passez directement à l'étape 5.
Étape 2 : autoriser les scripts uniquement dans la fenêtre ouverte
Quand l'utiliser : vous devez lancer un script de confiance une seule fois, sans modifier durablement le PC.
Résultat attendu : le script s'exécute. Le réglage est conservé seulement en mémoire : il disparaît à la fermeture de la fenêtre, il n'y a donc rien à annuler.
Étape 3 : autoriser vos scripts locaux pour votre compte
Quand l'utiliser : vous utilisez régulièrement des scripts que vous avez écrits ou copiés vous-même sur le PC.
La valeur RemoteSigned autorise les scripts créés sur le PC, mais exige une signature numérique (ou un déblocage, voir l'étape 4) pour les scripts téléchargés depuis Internet, y compris par e-mail ou messagerie instantanée. C'est un compromis plus prudent que Unrestricted ou Bypass, qui laissent passer tous les scripts.
Résultat attendu : vos scripts locaux se lancent, y compris dans les nouvelles fenêtres PowerShell.
Retour arrière : pour retirer ce réglage et revenir au comportement par défaut, tapez :
Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
Pour appliquer le réglage à tous les utilisateurs du PC, la portée est LocalMachine : Microsoft indique qu'il faut alors lancer PowerShell avec Exécuter en tant qu'administrateur. Notez qu'un réglage CurrentUser est prioritaire sur LocalMachine.
Étape 4 : débloquer un script téléchargé
Quand l'utiliser : la stratégie est déjà RemoteSigned, mais un script téléchargé est refusé car il n'est pas signé.
Windows marque les fichiers téléchargés avec un flux de données nommé Zone.Identifier. Avec RemoteSigned, PowerShell refuse les scripts non signés portant cette marque. La commande Unblock-File retire cette marque : Microsoft recommande de vérifier le fichier et sa source avant de l'utiliser.
Résultat attendu : le script se lance normalement. Ne débloquez pas en masse un dossier entier de fichiers que vous n'avez pas vérifiés.
Étape 5 : réglage imposé par une stratégie de groupe
Quand l'utiliser : l'étape 1 montre une valeur dans MachinePolicy ou UserPolicy, ou Set-ExecutionPolicy indique que la portée est définie par une stratégie de groupe.
D'après Microsoft, le paramètre de stratégie de groupe Activer l'exécution des scripts (Turn on Script Execution) l'emporte sur les réglages faits dans PowerShell, à toutes les portées, y compris la portée Process. Désactivé, il empêche tout script de s'exécuter.
Résultat attendu : après modification de la stratégie par la personne habilitée, Get-ExecutionPolicy -List n'affiche plus de valeur imposée et les étapes 2 à 4 s'appliquent.
Cas particuliers
| Situation | Que faire |
|---|---|
| PowerShell 7 et Windows PowerShell se comportent différemment | Les deux sont des programmes distincts : la documentation de PowerShell 7 indique RemoteSigned comme valeur par défaut sur Windows. Lancez Get-ExecutionPolicy -List dans chaque console. |
| Un tutoriel conseille Unrestricted ou Bypass de façon permanente | Préférez RemoteSigned pour votre compte (étape 3) : Microsoft signale le risque d'exécuter des scripts malveillants avec Unrestricted, et Bypass ne bloque rien. |
| Le programme est bloqué par une autre protection de Windows | Voir Application bloquée par le Contrôle intelligent des applications sous Windows 11 ou Fichier bloqué à tort par Microsoft Defender. |
Vérification finale
- ☐ Get-ExecutionPolicy -List affiche la valeur attendue à la bonne portée.
- ☐ Le script de confiance se lance sans message rouge.
- ☐ Aucune stratégie Unrestricted ou Bypass n'a été laissée en place inutilement.
- ☐ Vous savez annuler le réglage avec la valeur Undefined.
Sources
- Microsoft Learn : about_Execution_Policies (Windows PowerShell 5.1)
- Microsoft Learn : Set-ExecutionPolicy
- Microsoft Learn : Unblock-File
- Microsoft Learn : about_Execution_Policies (PowerShell 7.6)
Le problème continue ?
Répondez dans ce sujet en indiquant votre version de Windows (touches Windows + R, puis winver), la console utilisée (Windows PowerShell ou PowerShell 7), le résultat complet de Get-ExecutionPolicy -List, le message d'erreur exact et l'origine du script (écrit par vous, téléchargé, fourni par un logiciel). Ne publiez pas le contenu d'un script s'il contient des mots de passe, des clés ou des adresses internes.