无法加载ps1,因为此系统上禁用了运行脚本


120

我尝试powershell从C#运行脚本。

首先,我将设置ExecutionPolicyUnrestricted,脚本现在从开始运行PowerShell ISE

现在这是C#我的代码:

class Program
{
    private static PowerShell ps;
    static void Main(string[] args)
    {
        ps = PowerShell.Create();
        string ps1File = Path.Combine(Environment.CurrentDirectory, "script.ps1");
        ExecuteScript(ps1File);
        Console.ReadLine();
    }

    static void ExecuteScript(string script)
    {
        try
        {
            ps.AddScript(script);
            Collection<PSObject> results = ps.Invoke();
            Console.WriteLine("Output:");
            foreach (var psObject in results)
            {
                Console.WriteLine(psObject);
            }
            Console.WriteLine("Non-terminating errors:");
            foreach (ErrorRecord err in ps.Streams.Error)
            {
                Console.WriteLine(err.ToString());
            }
        }
        catch (RuntimeException ex)
        {
            Console.WriteLine("Terminating error:");
            Console.WriteLine(ex.Message);
        }
    }
}

输出为:

无法加载ps1,因为此系统上禁用了运行脚本。有关详细信息,请参见http://go.microsoft.com/fwlink/?LinkID=135170上的about_Execution_Policies 。


1
您是否尝试将策略范围设置为“本地计算机”?'Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Unrestricted'–
图腾

6
运行Get-ExecutionPolicy -List并用结果编辑您的问题。此命令将向您显示不同的作用域及其ExecutionPolicy设置。
James C.

恐怕这似乎不起作用,但请注意,这不是在命令行级别,因为我可以在远程桌面上运行而不会出现问题。
yorkshireflatcap

Answers:


370

这可能是由于当前用户的undefined所致ExecutionPolicy

您可以尝试以下方法:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted

3
有效!谢谢 !
拉基·达瓦莱

2
我在包裹中遇到了这个问题,我用您的回答解决了,谢谢!
安杰洛Polotto

12
顺便说一句,这应该在PowershellWindows的cmd中执行。
特朗普2020-正义将于

非常感谢!!伙计们应该先尝试一下!
Fes Nguyen

3
@HDJEMAI,我想这取决于您正在运行的上下文。Unrestricted表示您可以运行所有脚本。另一个选择是将执行策略设置RemoteSigned为允许的执行策略,Allow local scripts and remote signed scripts但是取决于应用程序及其所执行的操作,仍然可能会抛出相同的错误。我认为您的方法在安全性方面是有效的,并且在使用之前,您始终可以阅读该政策的内容Get-ExecutionPloicy。尽管这样说的范围是当前用户,所以我认为风险很小。我希望这有帮助。
汤姆

27

在管理模式下打开powershell并运行以下命令

Set-ExecutionPolicy RemoteSigned


25

在您的Powershell或cmd中运行此代码

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

1
也适用于其他语言(现在正在编辑Ionic应用程序)!
Chiwda

同样为我工作,在VIsual Studio Code终端中运行,以便使用tsc命令运行
Typescript

12

如果您使用的是Visual Studio代码:

  1. 打开终端
  2. 运行命令:Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy不受限制
  3. 然后运行命令量角器conf.js

这与量角器测试脚本的执行相关,我也遇到了同样的问题,并且这样解决了。


7

以下三个步骤用于修复此系统错误时禁用运行脚本

步骤1:要解决此类问题,我们必须以管理员模式启动电源外壳。

步骤2:键入以下命令set-ExecutionPolicy RemoteSigned步骤3:按Y进行确认。

请访问以下以获得更多信息https://youtu.be/J_596H-sWsk


4

PowerShell执行策略默认设置为“受限”。您可以使用Set-ExecutionPolicy cmdlet更改PowerShell执行策略。要运行外部脚本,请将策略设置为RemoteSigned。

PS C:> Set-ExecutionPolicy RemoteSigned下面是PowerShell中四个不同执行策略的列表

受限–无法运行任何脚本。AllSigned –仅可运行由受信任的发布者签名的脚本。RemoteSigned –下载的脚本必须由受信任的发布者签名。不受限制–可以运行所有Windows PowerShell脚本。


3

在管理员模式下打开Windows Powershell并运行以下命令,其工作方式为VOILA!

Set-ExecutionPolicy RemoteSigned


2

另一个解决方案是从目录C:\ Users%username%\ AppData \ Roaming \ npm \中删除ng.ps1并清除npm缓存


1
我在使用npm模块时遇到了相同的错误,这是我最喜欢的解决方案。如果删除.ps1文件,它将使用其他两个脚本之一(例如Windows上的.cmd,否则不带扩展名),并且您不必更改安全配置
Giovanni P.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.