2010-02-08 18:41:03 +0000 2010-02-08 18:41:03 +0000
305
305

Comment activer l'exécution des scripts PowerShell ?

Lorsque j'essaie d'exécuter mon script PowerShell, j'obtiens cette erreur :

File C:\Common\Scripts\hello.ps1 cannot be loaded because the execution of scripts is disabled on this system. Veuillez consulter “get-help about_signing” pour plus de détails. At line:1 char:13 + .\hello.ps1 <<<<< + CategoryInfo : NotSpecified : ( :) [], PSSecurityException + FullyQualifiedErrorId : RuntimeException

回答 (10)

451
451
451
2010-02-08 18:44:16 +0000
  1. Démarrez Windows PowerShell avec l'option “Exécuter en tant qu'administrateur”. Seuls les membres du groupe Administrateurs sur l'ordinateur peuvent modifier la politique d'exécution.

  2. Activez l'exécution de scripts non signés en entrant :

Cela permettra d'exécuter des scripts non signés que vous écrivez sur votre ordinateur local et des scripts signés depuis Internet.

Voir aussi Running Scripts à la bibliothèque Microsoft TechNet.

91
91
91
2010-02-08 18:43:25 +0000

La politique d'exécution par défaut est définie en mode restreint, vous pouvez la voir en tapant :

Get-ExecutionPolicy

Vous devez taper ce qui suit pour la faire passer en mode non restreint :

Set-ExecutionPolicy unrestricted

J'espère que cela vous aidera

66
66
66
2013-01-14 00:46:49 +0000

Sur ma machine que j'utilise pour développer des scripts, j'utiliserai - sans restriction comme ci-dessus. Cependant, lorsque je déploierai mes scripts sur une machine d'utilisateur final, j'appellerai simplement powerhell avec le commutateur -executionpolicy :

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1
21
21
21
2016-09-07 07:06:18 +0000

Nous pouvons obtenir l'état de la politique d'exécution en cours par la commande ci-dessous :

Get-ExecutionPolicy;

Par défaut, il est Restreint. Pour permettre l'exécution de scripts PowerShell, nous devons définir cette politique d'exécution soit comme Bypass ou Unrestricted.

Nous pouvons définir la politique pour l'utilisateur actuel comme Bypass ou Unrestricted en utilisant l'une des commandes PowerShell ci-dessous :

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;

Unrestricted policy charge tous les fichiers de configuration et exécute tous les scripts. Si vous exécutez un script non signé qui a été téléchargé sur Internet, une autorisation vous est demandée avant qu'il ne soit exécuté.

Alors que dans la politique Bypass, rien n'est bloqué et il n'y a pas d'avertissements ou d'invites pendant l'exécution du script. Bypass ExecutionPolicy est plus souple que Unrestricted.

5
5
5
2016-01-21 10:01:36 +0000

Selon la version et la configuration de Windows, vous pouvez avoir l'avertissement suivant, même en mode Unrestricted :

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this
script can potentially harm your computer. If you trust this script, use the 
Unblock-File cmdlet to allow the script to run without this warning message. 
Do you want to run?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D")

La solution est d'utiliser la politique de “contournement”, activée avec la commande suivante :

Set-ExecutionPolicy Bypass

Depuis la documentation :

Bypass : Rien n'est bloqué et il n'y a pas d'avertissements ou de messages.

Ceci est évidemment peu sûr, veuillez comprendre les risques encourus.

3
3
3
2017-11-29 10:10:20 +0000

Une clé reg avec : Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell] “EnableScripts”=dword:00000001 “ExecutionPolicy”=“Bypass”

et :

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell]
"EnableScripts"=dword:00000001 "ExecutionPolicy"="Unrestricted"

fonctionne en effet aussi.

1
1
1
2018-12-04 22:06:53 +0000

Pour une raison quelconque, le cmdlet PowerShell n'a pas permis une exécution locale à l'échelle mondiale, juste pour le contexte de l'utilisateur local. Si j'essayais de lancer un script Powershell à partir de l'invite bash de CygWin, par exemple, qui s'exécute dans son propre contexte utilisateur, il ne s'exécuterait pas, donnant l'erreur “n'est pas signé numériquement”. La réponse était d'aller dans l'éditeur de politique de groupe local -> Politique informatique locale -> Modèles administratifs -> Composants Windows -> Windows PowerShell et de double-cliquer sur “Activer l'exécution du script”. Cela me permet ensuite de le modifier en “Activé” et ensuite la politique d'exécution de “Autoriser les scripts locaux et les scripts signés à distance” et de le faire fonctionner globalement quel que soit le contexte de l'utilisateur.

1
1
1
2019-04-24 14:47:15 +0000

Définir la politique (correctement) est le meilleur choix mais sur mes systèmes gérés, je n'ai pas la possibilité de changer cette politique.

*Pour moi, la solution la plus simple pour changer la politique est d'ouvrir le script dans le “PowerShell ISE”, de mettre en évidence le code (ou une partie du code) à exécuter et de cliquer ensuite sur le bouton “Exécuter la sélection” (ou utiliser le raccourci F8). *

Ce n'est pas la meilleure solution et ne fait pas grand-chose pour automatiser les tâches, mais cela me permet d'utiliser PowerShell sans nuire à mon département informatique.

1
1
1
2018-12-15 01:09:31 +0000

La réponse acceptée est correcte, mais la modification de la politique n'est disponible que pour l'instance en cours de fonctionnement de la Powershell, c'est-à-dire une fois que l'instance de la Powershell est fermée. La politique sera réinitialisée. Si un utilisateur réouvre une autre instance de Powershell, la politique par défaut sera appliquée qui est Restricted

Pour moi, je dois utiliser la console de code VisualStudio et g++ de cygwin pour construire des choses. La console utilise Powershell, avec la politique par défaut, rien ne peut être fait. Une solution est de changer la politique chaque fois que la console est tirée dans la console VisualStudio Code, peut-être un script de changement de la politique.

Je suis paresseux, donc une autre solution est de lancer Powershell en mode administrateur, similaire à ce que fait la réponse acceptée. mais avec un paramètre supplémentaire qui change les valeurs dans la table de registre. Une fois que c'est fait. Les autres instances de Powershell utiliseront la politique RemoteSigned par défaut.

set-executionpolicy remotesigned -Scope CurrentUser

-2
-2
-2
2018-04-05 13:49:49 +0000

La raison pour laquelle la touche reg fonctionne, c'est qu'elle fait exactement ce que les commandes PS font. Les commandes écrivent les changements dans les clés reg. Les commandes sont beaucoup plus rapides et faciles que la création d'une clé reg ou l'exploration du registre.