239 votes

Pourquoi mon script créé localement n'est-il pas autorisé à s'exécuter dans le cadre de la politique d'exécution RemoteSigned ?

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 de RemoteSigned a RemoteSigned 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. Non Windows PowerShell ISE ni Command 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 ?

7voto

shyam Points 87

Si le fichier est copié depuis un emplacement réseau, c'est-à-dire un autre ordinateur, il se peut que Windows ait bloqué ce fichier. Faites un clic droit sur le fichier et cliquez sur le bouton de déblocage et voyez si cela fonctionne.

6voto

leonidaa Points 320

Cette ligne de code a fonctionné dans Ubuntu avec virtualbox et avec Win 10 comme OS virtuel, à l'intérieur du powershell

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Si cela ne fonctionne pas, je vous recommande de lire les ressources ci-dessous :

Politique d'exécution

Module : Microsoft.PowerShell.Security Définit les politiques d'exécution de PowerShell pour les ordinateurs Windows.

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy?view=powershell-7.1#:~:text=Pour%20changer%20la%20politique%20d'exécution,Get%2DExecutionPolicy%20with%20no%20paramètres .

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/get-executionpolicy?view=powershell-7.1

Get-ExecutionPolicy -List

https://devblogs.microsoft.com/scripting/hey-scripting-guy-how-can-i-sign-Windows-powershell-scripts-avec-une-entreprise-Windows-pki-part-2-de-2/

1voto

Mo Zaatar Points 346

Ce qui fonctionne pour moi, c'est un clic droit sur le fichier .ps1, puis sur les propriétés. Cliquez sur le bouton "UNBLOCK". Cela fonctionne très bien pour moi, après avoir passé des heures à essayer de modifier les politiques.

-1voto

bdubb Points 17

C'est un problème d'IDE. Modifiez le paramètre dans l'interface graphique PowerShell. Allez dans l'onglet Outils et sélectionnez Options, puis Options de débogage . Puis cochez la case Désactiver l'obligation de signer les scripts. . C'est fait.

-1voto

pranav aggarwal Points 103

Sélectionnez votre terminal Invite de commande au lieu de Power shell. Cela devrait fonctionner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X