Question

J'ai écrit un simple fichier batch sous forme de script PowerShell et j'obtiens des erreurs lors de leur exécution.

C'est dans un répertoire de scripts sur mon chemin.

Cannot be loaded because the execution of scripts is disabled on this system. 
please see "get-help about-signing".

J'ai regardé dans l'aide, mais c'est loin d'être utile.

Était-ce utile?

La solution

Il pourrait s'agir du niveau de sécurité par défaut de PowerShell, qui (IIRC) n'exécutera que des scripts signés.

Essayez de taper ceci :

set-executionpolicy remotesigned

Cela indiquera à PowerShell d'autoriser l'exécution de scripts locaux (c'est-à-dire sur un lecteur local) non signés.

Essayez ensuite d'exécuter à nouveau votre script.

Autres conseils

Tu dois courir Set-ExecutionPolicy:

Set-ExecutionPolicy Restricted <-- Will not allow any powershell scripts to run.  Only individual commands may be run.

Set-ExecutionPolicy AllSigned <-- Will allow signed powershell scripts to run.

Set-ExecutionPolicy RemoteSigned <-- Allows unsigned local script and signed remote powershell scripts to run.

Set-ExecutionPolicy Unrestricted <-- Will allow unsigned powershell scripts to run.  Warns before running downloaded scripts.

Set-ExecutionPolicy Bypass <-- Nothing is blocked and there are no warnings or prompts.

Utiliser:

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

Utilisez toujours la commande ci-dessus pour activer l'exécution de PowerShell dans la session en cours.

J'ai pu contourner cette erreur en appelant PowerShell comme ceci :

powershell -executionpolicy bypass -File .\MYSCRIPT.ps1

Autrement dit, j'ai ajouté le -executionpolicy bypass à la façon dont j'ai invoqué le script.

Cela a fonctionné sous Windows 7 Service Pack 1.Je suis nouveau sur PowerShell, il pourrait donc y avoir des mises en garde à ce sujet dont je ne suis pas au courant.

[Modifier 26/06/2017] J'ai continué à utiliser cette technique sur d'autres systèmes, notamment Windows 10 et Windows 2012 R2, sans problème.

Voici ce que j'utilise maintenant.Cela m'empêche d'exécuter accidentellement le script en cliquant dessus.Lorsque je l'exécute dans le planificateur, j'ajoute un argument :"planificateur" et cela contourne l'invite.

Cela met également la fenêtre en pause à la fin afin que je puisse voir la sortie de PowerShell.

if NOT "%1" == "scheduler" (
   @echo looks like you started the script by clicking on it.
   @echo press space to continue or control C to exit.
   pause
)

C:
cd \Scripts

powershell -executionpolicy bypass -File .\rundps.ps1

set psexitcode=%errorlevel%

if NOT "%1" == "scheduler" (
   @echo Powershell finished.  Press space to exit.
   pause
)

exit /b %psexitcode%
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process

La commande ci-dessus a fonctionné pour moi même lorsque l'erreur suivante se produit :

Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied.

Il convient également de savoir que vous devrez peut-être inclure .\ devant le nom du script.Par exemple:

.\scriptname.ps1

La commande set-executionpolicy unrestricted permettra à tout script que vous créez de s'exécuter en tant qu'utilisateur connecté.Assurez-vous simplement de redéfinir le paramètre de stratégie d'exécution sur signé à l'aide du set-executionpolicy signed commande avant de vous déconnecter.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top