, , , ,

PowerShell : Définir la stratégie d’exécution des scripts

Lors du lancement de PowerShell l'option -ExecutionPolicy permet de définir la stratégie d'exécution des scripts pour le processus PowerShell et les processus fils.

# Démarrage de PowerShell sans autoriser l’exécution de scrips
# pour le processus courant
powershell -ExecutionPolicy Restricted
 
 
Get-ExecutionPolicy
Restricted
 
Get-ExecutionPolicy -Scope Process
Restricted
 
# Affiche les portées par priorité et la stratégie associée
Get-ExecutionPolicy -List
 
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process      Restricted
  CurrentUser          Bypass
 LocalMachine          Bypass

Dans l'exemple ci-dessus on peut lire que la stratégie associée à la portée (ou étendue) Process est Restricted, elle est prioritaire sur les étendues CurrentUser et LocalMachine c'est donc sa stratégie qui s'applique : l'exécution des scripts est refusée :

.\HelloWorld.ps1
.\HelloWorld.ps1 : Impossible de charger le fichier C:\Users\yoann\dev\HelloWorld.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.
Au caractère Ligne:1 : 1
+ .\HelloWorld.ps1
+ ~~~~~~~~~~~~~~~~
    + CategoryInfo          : Erreur de sécurité : (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

La cmdlet Set-ExecutionPolicy permet de modifier la stratégie associée à la portée Process :

Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope Process
 
# Affiche les portées et leur stratégie
Get-ExecutionPolicy -List                                    
 
        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser          Bypass
 LocalMachine          Bypass

La stratégie Bypass est associée à l'utilisateur courant, elle s'applique à présent. Le script peut être exécuté :

.\HelloWorld.ps1
 
Hello World !