456 votes

Comment activer l'exécution des scripts PowerShell ?

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

Fichier C:\Common\<strkeep>scripts<strkeep>\hello.ps1 ne peut être chargé car l'exécution de 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:13
+ . \hello.ps1 <<<<
+ CategoryInfo : NotSpecified : ( :) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException

1 votes

Je sais que ce fil de discussion date, mais deux personnes de la communauté ont écrit deux messages qui traitent de cette réponse en profondeur ici. adamtheautomator.com/run-powershell-script

638voto

ogrodnek Points 146
  1. Lancez 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. Activer l'exécution de scripts non signés en entrant :

    set-executionpolicy remotesigned

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

Voir aussi Exécution de scripts à la bibliothèque Microsoft TechNet.

5 votes

Cela changera-t-il la politique de manière permanente ou dois-je le faire à chaque fois que je redémarre mon ordinateur ?

5 votes

@Ray Cela changera la politique de façon permanente.

2 votes

@Ray See la documentation . Par défaut, il le définit pour le LocalMachine . Pour définir d'autres champs d'application ( CurrentUser o Process ), passe -Scope explicitement.

133voto

Matías Points 3008

La politique d'exécution par défaut est fixée à restreint vous pouvez le voir en exécutant Get-ExecutionPolicy :

Get-ExecutionPolicy

Exécuter Politique d'exécution comme ceci pour passer à la sans restriction mode :

Set-ExecutionPolicy unrestricted

16 votes

La signature obligatoire a du sens si vous vous attendez à ce que l'utilisateur copie et colle des scripts malveillants depuis Internet. Si vous supposez que l'utilisateur n'est pas stupide, alors "remotesigned" n'ajoute aucune sécurité et rend la vie difficile.

1 votes

@Guss : En testant cela, j'ai constaté que RemoteSigned ne nécessite plus de fichiers .ps1 générés localement pour être signés, et il traite le contrôle de source git comme une source locale.

1 votes

Joshua - oui, c'est exactement ce que je veux dire. Si RemoteSigned ne bloque pas le copier-coller, ne bloque pas git ou d'autres méthodes de téléchargement hors EIE, alors à quoi sert-il ? Dites-le avec moi : "absolument rien !". Je pense qu'exiger que les scripts soient signés avec un certificat de signature de code de 100 $ est inutile, stupide et annule tout le bien qu'un langage de script décent peut faire pour Windows. Ceci étant dit, si la voie à suivre est de faire en sorte que les utilisateurs comprennent ce qu'ils font pour utiliser les PS scripts, alors nous sommes peut-être sur qqch.... Nahhhh, ça ne marchera jamais ;-)

93voto

MDMoore313 Points 5492

Sur ma machine que j'utilise pour dev scripts, je vais utiliser -unrestricted comme ci-dessus. Cependant, lorsque je déploie mes scripts sur une machine d'utilisateur final, je vais juste appeler powershell avec le commutateur -executionpolicy :

powershell.exe -noprofile -executionpolicy bypass -file .\script.ps1

3 votes

Vous pouvez combiner cette astuce avec une astuce polyglotte dans un fichier .CMD. Voir stackoverflow.com/a/8597794/5314

0 votes

Joli ! J'ai déployé des sfx faits par Winrar. rarlabs.com

1 votes

Cette astuce m'a permis d'exécuter powershell script à partir de Git Bash (MINGW32 bash)

34voto

Pratik Patil Points 399

Nous pouvons obtenir le statut de la politique d'exécution actuelle par la commande ci-dessous :

Get-ExecutionPolicy;

Par défaut, c'est Restreint . Pour permettre l'exécution des scripts PowerShell, nous devons définir cette ExecutionPolicy soit en tant que Bypass o Non affecté .

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

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

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

Non affecté La politique charge tous les fichiers de configuration et exécute tous les scripts. Si vous exécutez un scriptsscriptscripts non signé qui a été téléchargé depuis Internet, vous êtes invité à demander la permission avant son exécution.

Considérant que dans Bypass rien n'est bloqué et il n'y a pas d'avertissements ou d'invites pendant l'exécution du script. La politique d'exécution par contournement est plus souple que la politique sans restriction.

10voto

Benoit Blanchon Points 265

En fonction de la version et de la configuration de Windows, il se peut que vous ayez l'avertissement suivant, même dans l'application Unrestricted mode :

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 "bypass", activée par la commande suivante :

Set-ExecutionPolicy Bypass

De la documentation :

Bypass : Rien n'est bloqué et il n'y a pas d'avertissement ou d'invite.

C'est manifestement peu sûr, comprenez les risques encourus.

0 votes

C'est la seule façon dont j'ai pu faire fonctionner mon script dans un environnement avec powershell 2.0. Merci.

0 votes

@Wyatt8740 : Parce que Wine présente tous les lecteurs comme des lecteurs réseau.

0 votes

@Joshua je n'en avais aucune idée. pouvez-vous me donner une source pour cette déclaration ? j'ai essayé un google occasionnel, mais je cherche manifestement mal.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X