Comment avez-vous réussi à changer de politique en matière d'exécution et de permettre l'exécution de scripts PowerShell
J'ai un problème concernant la modification de la l'Exécution de la Politique dans mon Serveur Windows 2008+ OS. C'est la première fois que j'essaie d'exécuter un script pour laquelle j'ai besoin de ressources d'accès complet et j'ai essayer ce qui suit après le démarrage de Powershell dans mode élevé:
Set-ExecutionPolicy Unrestricted
Mais j'obtiens ceci:
Set-ExecutionPolicy : Windows PowerShell updated your execution policy
successfully, but the setting is overridden by a policy defined at a more
specific scope. Due to the override, your shell will retain its current
effective execution policy of RemoteSigned. Type "Get-ExecutionPolicy -List"
to view your execution policy settings. For more information please see
"Get-Help Set-ExecutionPolicy".
At line:1 char:1
+ Set-ExecutionPolicy Unrestricted
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
+ FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand
Si je suis Administrateur, je ne peux pas changer la Politique d'Exécution. Que faire?
Vous devez vous connecter pour publier un commentaire.
Le message d'erreur indique que le paramètre que vous essayez de définir via
Set-ExecutionPolicy
est remplacé par un paramètre dans un autre champ. UtilisationGet-ExecutionPolicy -List
à voir dont la portée a du paramètre.Comme vous pouvez le voir, ces deux paramètres ont été définis en dépit de l'erreur, mais le paramètre le plus de portée spécifique (
Process
) prend toujours la priorité, soit en empêchant ou en permettant l'exécution du script.Depuis l'étendue par défaut est
LocalMachine
l'erreur peut être causée par un paramètre dans leCurrentUser
ouProcess
portée. Cependant, plus la raison principale est que l'exécution du script a été configuré via une stratégie de groupe (local ou de domaine).Une stratégie de groupe locale peut être modifié par un administrateur local via
gpedit.msc
(Local Éditeur de Stratégie de Groupe), comme décrit dans cette réponse.Une stratégie de groupe de domaine ne peuvent pas être remplacées par des paramètres locaux et politiques et doit être changé par un administrateur de domaine via
gpmc.msc
(Gestion de Stratégie de Groupe) sur un contrôleur de domaine.Pour à la fois local et le domaine des politiques de l'paramètre peut être défini comme un paramètre d'ordinateur:
ou comme un paramètre utilisateur:
L'ancien sont appliqués à des objets d'ordinateur, alors que ces derniers sont appliqués à des objets utilisateur. Pour les stratégies locales il n'y a pas de différence significative entre l'utilisateur et l'ordinateur politiques, parce que les politiques d'utilisateurs sont automatiquement appliquées à tous les utilisateurs sur l'ordinateur.
Une politique peut avoir l'une des trois (ou cinq membres, si vous comptez les 3 paramètres disponibles pour l'état Activé séparément):
Set-ExecutionPolicy AllSigned
).Set-ExecutionPolicy RemoteSigned
).Set-ExecutionPolicy Unrestricted
).Set-ExecutionPolicy Restricted
).Les modifications apportées par
Set-ExecutionPolicy
n'entrera en vigueur que lorsque le local et le domaine les politiques n'est Pas Configuré (politique d'exécutionUndefined
dans les étenduesMachinePolicy
etUserPolicy
).Le problème est que Windows ne permet pas de tous les scripts à exécuter dans
Unrestricted
mode. En fait, peu importe la stratégie d'exécution de votre utilisateur (même si l'administrateur), leLocal Group Policy
aura la priorité.Et par défaut, le groupe local de l'exécution du script de la politique est tel pour les scripts qui ne sont pas autorisés à être exécutés. Nous avons besoin de le changer!
Changer le Groupe Local de l'Exécution de la Politique
Nous le faire via la
Local Group Policy Editor
de laquelle vous pouvez atteindre par la recherche dans le Windows barre de Recherche pour "stratégie de groupe". Ou cela:Win + r
et de taper la commandemmc
.File -> Add Remove Snap In...
.Group Policy Object Editor
et l'ajouter.Puis dans le volet de gauche, le groupe de l'éditeur peut être étendu. Développer et accédez à
Computer Configuration -> Administrative Templates -> Windows Components
.Puis à
Windows PowerShell
.Afin de sélectionner
Turn on Script Execution
. Modification de la configuration deEnabled
et spécifierAllow all scripts
dansExecution Policy
.Confirmer en appuyant sur
Ok
et fermer la Console de Gestion.Un correctif est désormais disponible pour installer:
2.8.7 pour VS 2013:
https://github.com/NuGet/Home/releases/download/2.8.7/NuGet.Tools.vsix
3.1.1 pour VS 2015:
https://github.com/NuGet/Home/releases/download/3.1.1/NuGet.Tools.vsix
https://github.com/NuGet/Home/issues/974
Si vous exécutez ce avec visual studio 2015 récemment, vérifier s'il ya des mises à jour pour le gestionnaire de package nuget dans outils > extensions et mises à jour>
Si le PowerShell ExecutionPolicy est fixé par un Contrôleur de Domaine via une stratégie de groupe, vous devrez réinitialiser le ExecutionPolicy sur "Bypass" dans le registre après chaque démarrage. J'ai créé une paire de démarrage des scripts pour automatiser le processus. Ci-dessous, je décris mon processus.
Créer un dossier appelé dossier %USERPROFILE%\Documents\StartupScripts puis placer un script PowerShell appelé ExecutionPolicy.ps1 avec le code suivant:
Puis créer un fichier appelé " %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Menu Démarrer\Programmes\Démarrage\Démarrage.cmd et placez le code suivant dedans:
Ce script sera lancé au début de chaque connexion.
Créer les suivants
ps.cmd
et la mettre dans votre CHEMIN:Maintenant, vous pouvez exécuter un script powershell comme dans:
Même si @Ansgar Wiechers Réponse ne fonctionne pas.. Alors il peut être question avec vous MachinePolicy Portée. Il peut donc y avoir une solution de contournement pour ce problème est..
Modifier la Valeur de Registre pour ExecutionPolicy Clé à
il a travaillé pour moi d'exécuter ps script après avoir essayé beaucoup de solutions.