Lorsque j'essaie d'exécuter mon script PowerShell, le message d'erreur suivant s'affiche:
Le fichier C: \ Common \ Scripts \ hello.ps1 ne peut pas être chargé car l'exécution des scripts est désactivée sur ce système. Veuillez voir "get-help about_signing" pour plus de détails.
À la ligne: 1 caractère: 13
+. \ Hello.ps1 <<<<
+ CategoryInfo: NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId: RuntimeException
la source
LocalMachine
. Pour définir d'autres portées (CurrentUser
ouProcess
), passez-Scope
explicitement.La stratégie d'exécution par défaut est définie sur restreinte, vous pouvez le voir en tapant:
Vous devez taper ce qui suit pour passer en mode sans restriction:
J'espère que cela t'aides
la source
RemoteSigned
ne bloque pas le copier-coller, ne bloque pas Git ou d'autres méthodes de téléchargement non-IE, alors à quoi ça sert? Dis-le avec moi: "Absolument rien!". Exiger que les scripts soient signés avec un certificat de signature de code de 100 USD est inutile, stupide et annule tout le bien qu'un langage de script décent peut faire pour Windows. Cela dit, si la solution consiste à amener les utilisateurs à comprendre ce qu’ils font pour utiliser les scripts PS, nous risquons d’être trop gênés ... Nahhhh, ça ne marchera jamais ;-)Sur ma machine que j'utilise pour les scripts de développement, je vais utiliser -unrestricted comme ci-dessus. Lors du déploiement de mes scripts sur un ordinateur d'utilisateur final, j'appellerai simplement PowerShell avec le commutateur -executionpolicy:
la source
Nous pouvons obtenir le statut de ExecutionPolicy actuel à l'aide de la commande ci-dessous:
Par défaut, il est restreint . Pour autoriser l'exécution de scripts PowerShell, vous devez définir cette ExecutionPolicy sur Bypass ou Unrestricted .
Nous pouvons définir la stratégie pour l'utilisateur actuel comme
Bypass
ouUnrestricted
en utilisant l'une des commandes PowerShell ci-dessous:Une politique sans restriction charge tous les fichiers de configuration et exécute tous les scripts. Si vous exécutez un script non signé téléchargé depuis Internet, vous êtes invité à fournir une autorisation avant son exécution.
Tandis que dans la stratégie de contournement , rien n'est bloqué et il n'y a aucun avertissement ou invite lors de l'exécution du script. Bypass ExecutionPolicy est plus détendu que Sans restriction.
la source
Selon la version et la configuration de Windows, l'avertissement suivant peut s'afficher, même en
Unrestricted
mode:La solution consiste à utiliser la stratégie "contourner", activée avec la commande suivante:
De la documentation :
Ceci est évidemment peu sûr, veuillez comprendre les risques encourus.
la source
Une clé de
registre avec: Windows Registry Editor Version 5.00
et:
fonctionne en effet aussi.
la source
Pour une raison quelconque, la cmdlet PowerShell n'a pas permis l'exécution locale au niveau global, uniquement pour le contexte utilisateur local. Si j'essayais de démarrer un script Powershell à partir de l'invite bash de CygWin, par exemple, qui s'exécute sous son propre contexte utilisateur, il ne s'exécuterait pas, donnant l'erreur "n'est pas signé numériquement". La réponse a été d'aller dans l'éditeur de stratégie de groupe locale -> Stratégie d'ordinateur local -> Modèles d'administration -> Composants Windows -> Windows PowerShell et double-cliquez sur "Activer l'exécution du script". Cela me laisse ensuite changer pour «Activé», puis la politique d’exécution «Autoriser les scripts locaux et les scripts signés distants» et le faire fonctionner globalement quel que soit le contexte de l’utilisateur.
la source
La réponse acceptée est correcte, mais la modification de stratégie n'est disponible que pour l'instance actuellement en cours de Powershell, ce qui signifie qu'une fois que l'instance de Powershell est fermée. La politique sera réinitialisée. Si un utilisateur rouvre une autre instance de Powershell, la stratégie par défaut sera appliquée.
Restricted
Pour moi, je dois utiliser la console VisualStudio Code et g ++ de cygwin pour créer des choses. La console utilise Powershell, avec la politique par défaut, rien ne peut être fait. Une solution consiste à modifier la stratégie à chaque fois que la console est déclenchée dans la console Code VisualStudio, par exemple un script de modification de la stratégie.
Je suis paresseux, alors une autre solution consiste à exécuter Powershell en mode administrateur, comme 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 cela a été fait. D'autres instances de Powershell utiliseront la
RemoteSigned
stratégie par défaut.set-executionpolicy remotesigned -Scope CurrentUser
la source
Définir la stratégie (correctement) est le meilleur choix, mais sur mes systèmes gérés, je ne suis pas en mesure de la modifier.
Pour moi, la solution la plus simple pour modifier la stratégie consiste à ouvrir le script dans "PowerShell ISE" , à mettre en surbrillance le code (ou une partie du code) à exécuter, puis à cliquer sur le bouton "Exécuter la sélection" (ou utiliser la touche F8). raccourci).
Ce n'est pas la meilleure solution et ne fait pas grand chose pour l'automatisation des tâches, mais cela me permet d'utiliser et d'utiliser PowerShell tout en évitant les problèmes de mon service informatique.
la source
La raison pour laquelle la clé de reg fonctionne, c'est parce qu'il fait exactement ce que font les commandes PS. Les commandes écrivent les modifications dans les clés de registre. Les commandes sont beaucoup plus rapides et faciles que de créer une clé de registre ou de creuser dans le registre.
la source