web-dev-qa-db-fra.com

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

J'essaie d'exécuter le fichier .cmd qui appelle un script PowerShell à partir de l'invite de commande et j'obtiens l'erreur ci-dessous:

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

J'ai exécuté set-executionpolicy unrestricted et lorsque je lance get-executionpolicy à partir de PowerShell, je récupère unrestricted.

// Sortie de Powershell

PS C:\Utilisateurs\Administrateur> get-executionpolicy

Libre

// Sortie de DOS

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Portail de gestion\Installer\Scr

ipts> powershell.\Management_Install.ps1 1

AVERTISSEMENT: Exécution de x86 PowerShell ...

Impossible de charger le fichier C:\Projects\Microsoft.Practices.ESB\Source\Samples\Management Portal\Install\Scripts\Management_Install.ps1 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: 25

  • .\Management_Install.ps1 <<<< 1

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

    • FullyQualifiedErrorId: RuntimeException

C:\Projects\Microsoft.Practices.ESB\Source\Samples\Portail de gestion\Installer\Scripts> pause

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

Le système est Windows Server 2008 R2.

Qu'est-ce que je fais mal?

1396
Conor

Si vous utilisez Windows Server 2008 R2, il existe une version de PowerShell x64 et x86, qui doivent toutes deux avoir leurs stratégies d'exécution définies. Avez-vous défini la stratégie d'exécution sur les deux hôtes?

En tant que Administrator, vous pouvez définir la stratégie d'exécution en la saisissant dans la fenêtre PowerShell:

Set-ExecutionPolicy RemoteSigned

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

1836
Chad Miller

Vous pouvez contourner cette stratégie en ajoutant -ExecutionPolicy ByPass lors de l'exécution de PowerShell.

powershell -ExecutionPolicy ByPass -File script.ps1
592
Jack Edmonds

J'ai eu un problème similaire et j'ai constaté que la cmd par défaut sur Windows Server 2012 , exécutait celui x64.

Pour Windows 7, Windows 8, Windows Server 2008 R2 ou Windows Server 2012, exécutez les commandes suivantes en tant que Administrator:

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 

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

Références:
MSDN - Stratégies d’exécution de Windows PowerShell
Windows - Explication des répertoires 32 bits et 64 bits

114
Ralph Willgoss

La plupart des réponses existantes expliquent le Comment, mais très peu expliquent le Pourquoi. Et avant d’exécuter du code provenant d’étrangers sur Internet, en particulier un code qui désactive les mesures de sécurité, vous devez comprendre exactement ce que vous faites. Alors, voici un peu plus de détails sur ce problème.

Depuis la page TechNet Page à propos des stratégies d'exécution :

Les stratégies d'exécution Windows PowerShell vous permettent de déterminer les conditions dans lesquelles Windows PowerShell charge les fichiers de configuration et exécute les scripts.

Les avantages énumérés par principes de base de PowerShell - Stratégie d'exécution et signature de code } sont les suivants:

  • Contrôle de l'exécution - Contrôle le niveau de confiance pour l'exécution des scripts.
  • Command Highjack - Empêche l'injection de commandes sur mon chemin.
  • Identity - Le script a-t-il été créé et signé par un développeur de confiance et/ou signé avec un certificat d'une autorité de certification de confiance?.
  • Integrity - Les scripts ne peuvent pas être modifiés par un logiciel malveillant ou un utilisateur malveillant.

Pour vérifier votre stratégie d'exécution actuelle, vous pouvez exécuter Get-ExecutionPolicy . Mais vous êtes probablement ici parce que vous voulez le changer.

Pour ce faire, exécutez la cmdlet Set-ExecutionPolicy .

Vous aurez deux décisions importantes à prendre lors de la mise à jour de la stratégie d'exécution.

Type de politique d'exécution:

  • Restricted - Aucun script local, distant ou téléchargé ne peut être exécuté sur le système.
  • AllSigned - Tous les scripts exécutés nécessitent une signature numérique.
  • RemoteSigned - Tous les scripts à distance (UNC) ou téléchargés doivent être signés.
  • Unrestricted - Aucune signature pour aucun type de script n'est requise.

Portée du nouveau changement

  • LocalMachine - La stratégie d'exécution concerne tous les utilisateurs de l'ordinateur.
  • CurrentUser - La stratégie d'exécution n'affecte que l'utilisateur actuel.
  • Process - La stratégie d'exécution affecte uniquement le processus Windows PowerShell en cours.

† = par défaut

Par exemple: si vous souhaitez modifier la stratégie en RemoteSigned uniquement pour CurrentUser, vous devez exécuter la commande suivante:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Remarque: pour modifier la stratégie d'exécution, vous devez exécuter PowerShell en tant qu'administrateur . Si vous êtes en mode normal et essayez de modifier la stratégie d'exécution, vous obtiendrez le message d'erreur suivant. :

L'accès à la clé de registre 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' est refusé. Pour modifier la stratégie d'exécution pour l'étendue par défaut (LocalMachine), démarrez Windows PowerShell avec l'option "Exécuter en tant qu'administrateur".

Si vous souhaitez renforcer les restrictions internes sur vos propres scripts qui n'ont pas été téléchargés depuis Internet (ou du moins ne contiennent pas les métadonnées UNC), vous pouvez forcer la stratégie à n'exécuter que des scripts signés. Pour signer vos propres scripts, vous pouvez suivre les instructions de l'article de Scott Hanselman sur Signing PowerShell Scripts .

Note: la plupart des gens risquent de recevoir cette erreur chaque fois qu'ils ouvrent Powershell, car la première chose que PS essaie de faire lors de son lancement est d'exécuter votre script de profil utilisateur qui configure votre environnement comme bon vous semble. 

Le fichier se trouve généralement dans:

%UserProfile%\My Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1

Vous pouvez trouver l'emplacement exact en exécutant la variable powershell

$profile

S'il n'y a rien dans le profil qui vous intéresse et que vous ne voulez pas vous mêler de vos paramètres de sécurité, vous pouvez simplement le supprimer et powershell ne trouvera rien qu'il ne puisse pas exécuter.

103
KyleMit

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

set-executionpolicy unrestricted
34
manik sikka

Sous Windows 7:

Accédez au menu Démarrer et recherchez "Windows PowerShell ISE".

Cliquez avec le bouton droit sur la version x86 et choisissez "Exécuter en tant qu'administrateur".

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

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

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

34
Ryan

Si vous vous trouvez dans un environnement où vous n’êtes pas administrateur, vous pouvez définir la stratégie d’exécution pour vous, sans nécessiter d’administrateur.

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

ou

Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "Unrestricted"

Vous pouvez tout lire à ce sujet dans l'entrée d'aide.

Help Get-ExecutionPolicy -Full
Help Set-ExecutionPolicy -Full
29

RemoteSigned: tous les scripts que vous avez créés vous-même seront exécutés et tous les scripts téléchargés sur Internet devront être signés par un éditeur de confiance.

OK, changez la politique en tapant simplement:

Set-ExecutionPolicy RemoteSigned
23
Jaime

Nous pouvons obtenir le statut de la variable ExecutionPolicy actuelle par la commande ci-dessous:

Get-ExecutionPolicy;

Par défaut, il s'agit de Restricted . Pour permettre l'exécution de scripts PowerShell, nous devons définir cette ExecutionPolicy comme suit: Bypass ou Unrestricted .

Nous pouvons définir la stratégie pour l'utilisateur actuel sur 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é téléchargé depuis Internet, vous êtes invité à fournir une autorisation avant son exécution.

Alors que dans Bypass policy, 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 Unrestricted.

19
Pratik Patil

J'utilise Windows 10 et n'ai pu exécuter aucune commande. La seule commande qui m'a donné des indices était la suivante:

[x64]

  1. Ouvrez C:\Windows\SysWOW64\cmd.exe [en tant qu'administrateur]
  2. Exécutez la commande> powershell Set-ExecutionPolicy Unrestricted

Mais cela n'a pas fonctionné. C'était limité. Probablement de nouvelles politiques de sécurité pour Windows10. J'ai eu cette erreur:

Set-ExecutionPolicy: Windows PowerShell a correctement mis à jour votre stratégie d'exécution, mais le paramètre est remplacé par une stratégie définie dans une étendue plus spécifique. En raison de la substitution, votre Shell conservera sa politique d'exécution actuelle de ...

J'ai donc trouvé un autre moyen ( solution ):

  1. Ouvrir la commande/console d'exécution (Win + R)
  2. Tapez: gpedit.msc ( Stratégie de groupe Editeur)
  3. Accédez à Stratégie de l'ordinateur local -> Configuration de l'ordinateur -> Modèles d'administration - > Composants Windows -> Windows Powershell .
  4. Activer " Activer l'exécution du script "
  5. Définissez la stratégie selon vos besoins. J'ai mis le mien à " Autoriser tous les scripts ".

Ouvrez maintenant PowerShell et profitez-en;)

18
hugocabral

La définition de la stratégie d'exécution est spécifique à l'environnement. Si vous essayez d'exécuter un script à partir de x86 ISE en cours d'exécution, vous devez utiliser x86 PowerShell pour définir la stratégie d'exécution. De même, si vous exécutez ISE 64 bits, vous devez définir la stratégie avec PowerShell 64 bits.

9
ScriptAholic

Win + R et tapez commande copier/coller et appuyez sur OK:

powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "RemoteSigned"

Et exécutez votre script.

Puis annulez les modifications comme:

powershell Set-ExecutionPolicy -Scope "CurrentUser" -ExecutionPolicy "AllSigned"
8
Qamar

Vous pouvez également éviter cela en utilisant la commande suivante:

PS > powershell Get-Content .\test.ps1 | Invoke-Expression

Vous pouvez également lire cet article de Scott Sutherland qui explique 15 façons différentes de contourner le Set-ExecutionPolicy de PowerShell si vous n’avez pas les privilèges d’administrateur:

15 façons de contourner la stratégie d'exécution de PowerShell

7
Alexander Sinno
  1. Ouvrez PowerShell en tant qu'administrateur et exécutez Set-ExecutionPolicy -Scope CurrentUser
  2. Fournissez RemoteSigned et appuyez sur Entrée
  3. Exécuter Set-ExecutionPolicy -Scope CurrentUser
  4. Fournissez Sans restriction et appuyez sur Entrée
5
Ramanujam Allam

Dans l'éditeur PowerShell ISE , j'ai trouvé l'exécution de la première ligne suivante des scripts autorisés.

Set-ExecutionPolicy RemoteSigned -Scope Process
2
David Douglas

Dans PowerShell 2.0, la stratégie d'exécution a été définie sur désactivé par défaut.

Depuis lors, l’équipe PowerShell a apporté de nombreuses améliorations et elle est convaincue que les utilisateurs ne casseront pas grand chose lorsqu’ils exécuteront des scripts. Donc, à partir de PowerShell 4.0, il est activé par défaut.

Dans votre cas, tapez Set-ExecutionPolicy RemoteSigned à partir de la console PowerShell et dites oui.

1
Adil Arif

Accédez au chemin du registre HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell et définissez ExecutionPolicy sur RemoteSigned.

1

J'ai trouvé que cette ligne fonctionnait mieux pour l'un de mes serveurs Windows Server 2008 R2. Quelques autres n'ont eu aucun problème sans cette ligne dans mes scripts PowerShell:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Scope Process
0
WIlliamT

Ouvrez la fenêtre PowerShell en tant que Administrator . Ça va marcher.

0
Suganthan Raj

Plusieurs réponses pointent vers la politique d'exécution. Cependant, certaines choses requièrent également "administrateur runas". Ceci est le plus sûr dans la mesure où il n'y a pas de changement permanent dans la stratégie d'exécution et peut dépasser les restrictions de l'administrateur. Utiliser avec schedtask pour démarrer un lot avec: 

    runas.exe /savecred /user:administrator powershell -ExecutionPolicy ByPass -File script.ps1

de Jack Edmonds ci-dessus et Peter Mortensen/Dhana de post Comment exécuter une application en tant qu’exécutant en tant qu’administrateur à partir de l’invite de commande?

0
Kirt Carson

J'ai eu le même problème aujourd'hui. La stratégie d'exécution 64 bits n'était pas restreinte, alors que la version 32 bits était restreinte.

Voici comment modifier à distance la stratégie 32 bits:

Invoke-Command -ComputerName $servername -ConfigurationName Microsoft.PowerShell32 -scriptblock {Set-ExecutionPolicy unrestricted}
0
rko281

Si vous êtes ici pour l'avoir exécuté avec Ruby ou Chef et en utilisant `` l'exécution du système, exécutez les opérations suivantes:

`powershell.exe -ExecutionPolicy Unrestricted -command [Environment]::GetFolderPath(\'mydocuments\')`

Cette commande est pour obtenir le dossier "MyDocuments".

-ExecutionPolicy Unrestricted fait le tour.

J'espère que c'est utile pour quelqu'un d'autre.

0
JGutierrezC