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?
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.
Vous pouvez contourner cette stratégie en ajoutant -ExecutionPolicy ByPass
lors de l'exécution de PowerShell.
powershell -ExecutionPolicy ByPass -File script.ps1
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
echo %PROCESSOR_ARCHITECTURE%
[Environment]::Is64BitProcess
Références:
MSDN - Stratégies d’exécution de Windows PowerShell
Windows - Explication des répertoires 32 bits et 64 bits
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.
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.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.
L'exécution de cette commande avant le script résout également le problème:
set-executionpolicy unrestricted
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!
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
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
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
.
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]
- Ouvrez C:\Windows\SysWOW64\cmd.exe [en tant qu'administrateur]
- 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 ):
Ouvrez maintenant PowerShell et profitez-en;)
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.
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"
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
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
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.
Accédez au chemin du registre HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
et définissez ExecutionPolicy
sur RemoteSigned
.
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
Ouvrez la fenêtre PowerShell en tant que Administrator . Ça va marcher.
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?
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}
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.