Puisque cette question continue d'attirer des réponses qui sont soit réfutées par le corps de la question ou qui n'abordent pas le problème réel, veuillez lire ce simple résumé de ce que vous devez savoir :
- C'est no une question du type "Pourquoi mon installation par défaut de PowerShell n'exécute-t-elle pas les scripts ?".
- C'est no une question du type "Pourquoi mon installation de PowerShell n'exécute-t-elle pas les scripts téléchargés depuis l'internet ?".
- La question est de savoir pourquoi le
RemoteSigned
La politique d'exécution empêche l'exécution de script quand elle ne devrait pas.RemoteSigned
es el sólo politique d'exécution que je veux utiliser. Je suis conscient que d'autres politiques moins restrictives sont disponibles. Si ces politiques étaient des substituts acceptables, je les aurais simplement utilisées à la place et cette question n'existerait pas.- La politique d'exécution est déjà réglé sur
RemoteSigned
. En le changeant deRemoteSigned
aRemoteSigned
n'est pas une solution.- Le fichier script est créé et stocké localement.
- Le fichier script n'est pas bloqué. Le fichier script n'a jamais été bloqué (voir point précédent).
- Le fichier script ne peut être débloqué car il n'y a rien à débloquer (voir point précédent).
- Le fichier script est (tenté d'être) exécuté par un administrateur.
Windows PowerShell
est la seule application concernée. NonWindows PowerShell ISE
niCommand Prompt
ni aucun autre outil ou éditeurs ne sont pertinents.- La cause du problème a déjà a été identifié (voir réponse acceptée). Après presque 8 ans, je pense que toutes les autres explications évidentes explications évidentes, qu'elles soient applicables ou non, ont été postées aussi. Si vous pensez le contraire, alors veuillez lire la question et l'existant réponses existantes dans leur intégralité avant d'ajouter le vôtre.
J'utilise Windows PowerShell 2.0 sur Windows 7 Professionnel 64 bits. J'ai un script sur mon ordinateur. Desktop
qui provoque l'erreur suivante lorsque j'essaie de l'exécuter :
File C:\Users\UserName\Desktop\Script.ps1 cannot be loaded. The file C:\Users\UserName\Desktop\Script.ps1 is not digitally signed. The script will not execute on the system. Please see "get-help about_signing" for more details..
At line:1 char:54
+ C:\Users\UserName\Desktop\TestGetWindowsUpdateLog.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
Je suis à la fois un administrateur de domaine et un administrateur local, et si j'exécute Get-ExecutionPolicy -List
je peux voir que le Group Policy Object
que j'ai créé pour configurer PowerShell applique correctement les RemoteSigned
politique d'exécution au niveau de la machine :
Scope ExecutionPolicy
----- ---------------
MachinePolicy RemoteSigned
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
J'ai créé le script moi-même en Notepad
et a utilisé le Sysinternals ' streams
et le fichier Properties
pour confirmer que le script n'est pas traité comme provenant d'internet. Si je copie le script sur un partage réseau sur un serveur de domaine, alors il est autorisé à s'exécuter. Si j'exécute Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope LocalMachine
alors le script local n'est toujours pas autorisé à s'exécuter, ce qui est logique puisque la politique d'exécution au niveau du MachinePolicy
aura la priorité.
Comme le montrent les documents suivants about_Execution_Policies
( actuel ; au moment de la question ), le RemoteSigned
la politique signifie :
Les scripts peuvent s'exécuter.
Exige une signature numérique d'un éditeur de confiance sur les scripts et les fichiers de configuration qui sont téléchargés depuis Internet. (y compris les programmes de courrier électronique et de messagerie instantanée).
N'exige pas de signatures numériques sur les scripts que vous avez exécutés et que vous avez écrits sur l'ordinateur local (et non téléchargés sur l'Internet).
Risque d'exécuter des scripts non signés provenant de sources autres qu'Internet et des scripts signés, mais malveillants.
Mon script n'est pas signé, mais comme il est à la fois créé et exécuté localement, il devrait satisfaire au troisième point ci-dessus. Par conséquent...
- Pourquoi mon script n'est-il pas autorisé à s'exécuter ?
- Pourquoi PowerShell se plaint-il que mon script "n'est pas signé numériquement" alors que cette exigence ne devrait s'appliquer qu'aux fichiers provenant d'Internet ?
- Pourquoi PowerShell ne se soucie-t-il plus du fait que le script n'est pas signé lorsqu'il est exécuté depuis un partage réseau ?