La plupart des réponses existantes expliquent le comment , mais très peu expliquent le pourquoi . Et avant de vous lancer dans l'exécution de code d'inconnus sur Internet, en particulier de code qui désactive les mesures de sécurité, vous devez comprendre exactement ce que vous faites. Voici donc un peu plus de détails sur ce problème.
Sur la page À propos des stratégies d'exécution de TechNet :
Les stratégies d'exécution de 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 PowerShell Basics - Execution Policy and Code Signing sont les suivants:
- Contrôle de l'exécution - Contrôlez le niveau de confiance pour l'exécution des scripts.
- Command Highjack - Empêche l'injection de commandes sur mon chemin.
- Identité - Le script est-il créé et signé par un développeur en qui j'ai confiance et / ou signé avec un certificat d'une autorité de certification en laquelle j'ai confiance.
- Intégrité - Les scripts ne peuvent pas être modifiés par des logiciels malveillants ou des utilisateurs malveillants.
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, vous exécutez l' Set-ExecutionPolicy
applet de commande.
Vous aurez deux décisions importantes à prendre lors de la mise à jour de la politique 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 doivent être signés numériquement.
RemoteSigned
- Tous les scripts distants (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 politique d'exécution affecte tous les utilisateurs de l'ordinateur.
CurrentUser
- La politique d'exécution affecte uniquement 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 vouliez changer la stratégie en RemoteSigned pour le CurrentUser uniquement, vous exécuteriez 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 l'erreur suivante:
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 la portée par défaut (LocalMachine), démarrez Windows PowerShell avec l'option «Exécuter en tant qu'administrateur».
Si vous souhaitez resserrer 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 à exécuter uniquement des sripts signés. Pour signer vos propres scripts, vous pouvez suivre les instructions de l'article de Scott Hanselman sur la signature de scripts PowerShell .
Remarque : La plupart des gens sont susceptibles d'obtenir 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 vous l'aimez.
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
Si vous ne vous souciez de rien dans le profil et que vous ne voulez pas vous soucier de vos paramètres de sécurité, vous pouvez simplement le supprimer et PowerShell ne trouvera rien qu'il ne puisse pas exécuter.