.ps1 ne peut pas être chargé car l’exécution des scripts est désactivée sur ce système

J’exécute ce code pour exécuter le code PowerShell à partir d’une application ASP.NET:

System.Management.Automation.Runspaces.Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(); runspace.Open(); System.Management.Automation.Runspaces.Pipeline pipeline = runspace.CreatePipeline(); pipeline.Commands.AddScript(@"\\servername\path"); pipeline.Commands.Add("Out-Ssortingng"); Collection results = pipeline.Invoke(); runspace.Close(); 

Mais je reçois une erreur:

.ps1 ne peut pas être chargé car l’exécution des scripts est désactivée sur ce système. S’il vous plaît voir “get-help about_signing” pour plus de détails.

Le même code s’exécute correctement à partir d’une invite de commande ou d’une application Windows (Windows Forms).

L’exécution de votre script est bloquée en raison de la stratégie d’exécution .

Vous devez exécuter PowerShell en tant qu’administrateur et le définir sur le PC client sur Non restreint. Vous pouvez le faire en appelant Invoke avec:

 Set-ExecutionPolicy Unressortingcted 

Certains scénarios vous permettent de suivre les étapes suggérées dans les autres réponses, de vérifier que la stratégie d’exécution est définie correctement et que vos scripts échouent toujours. Si cela vous arrive, vous êtes probablement sur une machine 64 bits avec les versions 32 bits et 64 bits de PowerShell, et l’échec se produit sur la version qui n’a pas défini de stratégie d’exécution. Le paramètre ne s’applique pas aux deux versions , vous devez donc le définir explicitement deux fois.

Regardez dans votre répertoire Windows pour System32 et SysWOW64.

Répétez ces étapes pour chaque répertoire:

  1. Naviguez vers WindowsPowerShell \ v1.0 et lancez powershell.exe
  2. Vérifiez le paramètre actuel pour ExecutionPolicy:

    Get-ExecutionPolicy -List

  3. Définissez ExecutionPolicy pour le niveau et la scope souhaités, par exemple:

    Set-ExecutionPolicy -Scope LocalMachine Unressortingcted

Notez que vous devrez peut-être exécuter PowerShell en tant qu’administrateur en fonction de la scope pour laquelle vous tentez de définir la stratégie.

Vous pouvez en lire beaucoup plus ici: Exécution de scripts Windows PowerShell

Le problème est que la stratégie d’exécution est définie par utilisateur. Vous devrez exécuter la commande suivante dans votre application chaque fois que vous l’exécutez pour l’activer:

 Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned 

Il y a probablement un moyen de définir cela pour l’utilisateur ASP.NET également, mais cela signifie que vous n’ouvrez pas tout votre système, juste votre application.

( Source )

Vous devez exécuter Set-ExecutionPolicy :

 Set-ExecutionPolicy Unressortingcted <-- Will allow unsigned PowerShell scripts to run. Set-ExecutionPolicy Restricted <-- Will not allow unsigned PowerShell scripts to run. Set-ExecutionPolicy RemoteSigned <-- Will allow only remotely signed PowerShell scripts to run. 

J’ai eu un problème similaire et j’ai noté que le fichier 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 qu’administrateur:

x86

Ouvrez C: \ Windows \ SysWOW64 \ cmd.exe Exécutez la commande: powershell Set-ExecutionPolicy RemoteSigned

x64

Ouvrez C: \ Windows \ system32 \ cmd.exe Exécutez la commande powershell Set-ExecutionPolicy RemoteSigned

Vous pouvez vérifier le mode en utilisant

Dans CMD: echo% PROCESSOR_ARCHITECTURE% Dans Powershell: [Environnement] :: Is64BitProcess

J’espère que cela vous aidera.