2297 votes

PowerShell dit "l'exécution des scripts est désactivée sur ce système".

J'essaie d'exécuter un cmd qui appelle un script PowerShell de cmd.exe mais j'obtiens cette erreur :

Management_Install.ps1 ne peut être chargé car l'exécution des scripts est désactivée sur ce système.

J'ai lancé cette commande :

Set-ExecutionPolicy -ExecutionPolicy Unrestricted

Quand je cours Get-ExecutionPolicy à partir de PowerShell, il renvoie Unrestricted .

PS C:\Users\Administrator\> Get-ExecutionPolicy
Unrestricted

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portail \Install\Scripts > powershell . \Management_Install.ps1 1

AVERTISSEMENT : Exécution de PowerShell x86...

Fichier C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\Management_Install.ps1 ne peut être chargé car l'exécution des scripts est désactivée sur ce système. Veuillez consulter " get-help about_signing "pour plus de détails.

A la ligne:1 char:25

  • .\Management_Install.ps1 <<<< 1

    • CategoryInfo : NotSpecified : ( :) [], PSSecurityException

    • FullyQualifiedErrorId : RuntimeException

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portail \Install\Scripts > PAUSE

Appuyez sur n'importe quelle touche pour continuer. . .


Le système est Windows Server 2008R2.

Qu'est-ce que je fais de mal ?

3 votes

Il convient de souligner que la politique d'exécution a plusieurs portées, et que l'exécution de PowerShell de différentes manières peut donner lieu à différentes politiques. Pour afficher la liste des stratégies, exécutez Get-ExecutionPolicy -List .

0 votes

Toutes les politiques Les explications sont ici .

2881voto

Chad Miller Points 6207

Si vous utilisez Windows Server 2008 R2 alors il y a un x64 et x86 de PowerShell, qui doivent toutes deux avoir leur politique d'exécution définie. Avez-vous défini la politique d'exécution sur les deux hôtes ?

En tant que Administrateur vous pouvez définir la politique d'exécution en tapant ceci dans votre fenêtre PowerShell :

Set-ExecutionPolicy RemoteSigned

Pour plus d'informations, voir Utilisation de la cmdlet Set-ExecutionPolicy .

Lorsque vous avez terminé, vous pouvez remettre la politique à sa valeur par défaut avec :

Set-ExecutionPolicy Restricted

Vous pouvez voir une erreur :

Access to the registry key
'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied. 
To change the execution policy for the default (LocalMachine) scope, 
  start Windows PowerShell with the "Run as administrator" option. 
To change the execution policy for the current user, 
  run "Set-ExecutionPolicy -Scope CurrentUser".

Il se peut donc que vous deviez exécuter la commande comme ceci (comme indiqué dans les commentaires) :

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

166 votes

Set-ExecutionPolicy Restricted semble être le moyen de l'annuler si vous voulez remettre les permissions telles qu'elles étaient : technet.microsoft.com/fr/us/library/ee176961.aspx . La méthode de contournement temporaire par @Jack Edmonds me semble plus sûr : powershell -ExecutionPolicy ByPass -File script.ps1

50 votes

Pour une politique plus sûre, il faut l'étendre à l'utilisateur réel : Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

0 votes

Set-ExecutionPolicy RemoteSigned ne peut pas être la première ligne de votre script. Si c'est le cas, mettez-la en surbrillance et n'exécutez que sélectionné INITIALEMENT avant d'exécuter le reste de votre script.

901voto

Jack Edmonds Points 10264

Vous pouvez contourner cette politique pour un seul fichier en ajoutant -ExecutionPolicy Bypass lors de l'exécution de PowerShell

powershell -ExecutionPolicy Bypass -File script.ps1

7 votes

C'est aussi très pratique si vous êtes sur un compte non-administrateur. J'ai créé un raccourci vers %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass sur ma barre de tâches.

3 votes

Notez que Microsoft Technet le désigne par le terme "Bypass" et non "ByPass". Voir : technet.microsoft.com/nl-nl/library/hh849812.aspx

2 votes

Cela ne fonctionne pas pour moi, j'obtiens la même permission refusée que si je l'appelais normalement. Appeler un ps1 depuis un .bat en faisant type script.ps1 | powershell - fonctionne cependant.

267voto

Ralph Willgoss Points 3452

J'ai eu un problème similaire et j'ai remarqué que la valeur par défaut de l'option cmd sur Windows Server 2012 J'utilisais la version x64.

Pour Windows 10 , Windows 7 , Windows 8 , Windows Server 2008 R2 ou Windows Server 2012 Exécutez les commandes suivantes en tant que Administrateur :

x86 (32 bits)
Ouvrir C:\Windows\SysWOW64\cmd.exe
Exécutez la commande powershell Set-ExecutionPolicy RemoteSigned

x64 (64 bits)
Ouvrir C:\Windows\system32\cmd.exe
Exécutez la commande powershell Set-ExecutionPolicy RemoteSigned

Vous pouvez vérifier le mode en utilisant

  • En CMD : echo %PROCESSOR_ARCHITECTURE%
  • Dans Powershell : [Environment]::Is64BitProcess

Références :
MSDN - Politiques d'exécution de Windows PowerShell
Windows - explication du répertoire 32bit vs 64bit

4 votes

Fonctionne pour moi sous Windows 10

1 votes

Cela a fonctionné pour moi pour le processus d'installation de nodemon sur vscode. merci.

1 votes

Fonctionne sur Windows 10 x64

49voto

manik sikka Points 199

L'exécution de cette commande avant le script résout également le problème :

set-executionpolicy unrestricted

34 votes

-1 - Suivez le principe de la moindre permission. Fixez au moins la politique à RemoteSigned avant de supprimer toutes les restrictions de votre politique de sécurité. Si cela ne fonctionne pas, réévaluez vos points sensibles et les raisons pour lesquelles cela ne fonctionne pas. Vous pouvez définir unrestricted en dernier recours, mais ça ne devrait pas être votre point de départ.

5 votes

Merci de m'avoir signalé cette option également. Avec tout le respect que je dois aux besoins de sécurité à des fins de production, à une époque où la demande de capacité de prototypage rapide est si élevée, toutes les politiques et la sécurité empêchent vraiment de faire avancer les choses.

1 votes

En ce qui concerne le commentaire sur le prototypage, j'ai bien peur que ce soit la raison pour laquelle un mauvais code est mis en production. Bien sûr, ce n'est qu'un exemple trivial, mais si vous ne pouvez pas résoudre quelque chose d'aussi trivial pendant le développement, c'est un souci pour la mise en production. De plus, pour le code sur mesure, et si vous le pouvez, connaissez l'environnement cible - nous configurons la majorité de nos systèmes internes en tant que Remotesigned .

49voto

Ryan Points 2038

Dans Windows 7 :

Allez dans le menu Démarrer et cherchez "Windows PowerShell ISE".

Faites un clic droit sur la version x86 et choisissez "Exécuter en tant qu'administrateur".

Dans la partie supérieure, collez Set-ExecutionPolicy RemoteSigned ; exécutez le script. Choisissez "Oui".

Répétez ces étapes pour la version 64 bits de Powershell ISE également (la version non x86).

Je ne fais que clarifier les étapes auxquelles @Chad Miller a fait allusion. Merci Chad !

0 votes

Sous Windows 8 également, cela a fonctionné. J'ai défini Set-ExecutionPolicy RemoteSigned ; uniquement dans Windows Powershell, en l'exécutant en tant qu'administrateur. Je n'ai pas eu besoin de répéter la procédure pour la version x86.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X