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

Posted

技术标签:

【中文标题】.ps1 无法加载,因为此系统上禁用了脚本的执行【英文标题】:.ps1 cannot be loaded because the execution of scripts is disabled on this system 【发布时间】:2013-05-03 20:00:39 【问题描述】:

我运行此代码以从 ASP.NET 应用程序执行 PowerShell 代码:

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-String");

Collection<PSObject> results = pipeline.Invoke();

runspace.Close();

但我收到一个错误:

.ps1 无法加载,因为在 这个系统。有关详细信息,请参阅“get-help about_signing”。

相同的代码可以在命令提示符或 Windows(Windows 窗体)应用程序中正常运行。

【问题讨论】:

您只需要以管理员身份运行您的 powershell 然后运行以下两个留置权 第一行:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -scope currentuser 输入 Y 表示是,然后第二行:Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -范围 LocalMachine 再次输入 Y 表示是这样,享受 这不应该是重复的,在这个问题中,我们正在创建我们自己的运行空间。在重复中,我们在普通的 powershell 运行空间中运行,对于那些发现这个的人,当你打电话给RunspaceFactory.CreateRunspace你可以提供一个InitialSessionState,您将ExecutionPolicy 设置为ExecutionPolicy.Unrestricted 【参考方案1】:

由于execution policy,您的脚本被阻止执行。

您需要以管理员身份运行 PowerShell,并在客户端 PC 上将其设置为无限制。你可以通过调用 Invoke 来做到这一点:

Set-ExecutionPolicy Unrestricted

【讨论】:

这对我不起作用。好吧,实际上,如果您将其设置为 32 位和 64 位,它确实可以工作。 遵循最小权限原则。至少将策略设置为RemoteSigned,然后再删除对您的安全策略的所有限制。如果这不起作用,那么重新评估您的痛点是什么以及为什么它不起作用。您可以将无限制设置为最后的手段,但它不应该是您的起点。 我安装了 32 位和 64 位 PS。我必须对两者都设置执行策略。例如 C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe 和 C:\Windows\SysWOW64\WindowsPowerShell\v1.0\Powershell.exe。如果只有一个,生活会好一点。 谢谢! 8 年后仍然有用 运行良好,没有太多麻烦。【参考方案2】:

在某些情况下,您可以按照其他答案中建议的步骤操作,验证执行策略是否设置正确,但脚本仍然会失败。如果您遇到这种情况,您可能在 64 位计算机上同时安装了 32 位和 64 位版本的 PowerShell,而故障发生在没有设置执行策略的版本上。 该设置不适用于两个版本,因此您必须明确设置两次。

在您的 Windows 目录中查找 System32 和 SysWOW64。

对每个目录重复这些步骤:

    导航到 WindowsPowerShell\v1.0 并启动 powershell.exe

    检查 ExecutionPolicy 的当前设置:

    Get-ExecutionPolicy -List

    为您想要的级别和范围设置 ExecutionPolicy,例如:

    Set-ExecutionPolicy -Scope LocalMachine Unrestricted

请注意,您可能需要以管理员身份运行 PowerShell,具体取决于您尝试为其设置策略的范围。

【讨论】:

这是最好的答案 Set-ExecutionPolicy -Scope Process Unrestricted 对我有用 Set-ExecutionPolicy -Scope CurrentUser Unrestricted 为我工作 这为我解决了这个问题(在 64 位机器上) 这个答案实际上让我知道给了我同样的错误信息。我正在运行带有计划任务的 powershell 脚本,但我没有使用我的 windows 用户来运行脚本,而是使用了另一个帐户(服务帐户)。我必须以该帐户登录并取消限制该用户的脚本。【参考方案3】:

问题在于执行策略是基于每个用户设置的。每次运行应用程序时,您都需要在应用程序中运行以下命令以使其正常工作:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

可能还有一种方法可以为 ASP.NET 用户设置它,但这种方法意味着您不会打开整个系统,而只是打开您的应用程序。

(Source)

【讨论】:

这适用于 Windows 10 的 VScode PowerShell 控制台【参考方案4】:

你需要运行Set-ExecutionPolicy:

Set-ExecutionPolicy Unrestricted <-- 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.

【讨论】:

【参考方案5】:

我遇到了类似的问题,并注意到 Windows Server 2012 上的默认 cmd 运行的是 x64 的。

对于 Windows 7、Windows 8、Windows Server 2008 R2 或 Windows Server 2012,以管理员身份运行以下命令:

x86

打开C:\Windows\SysWOW64\cmd.exe 运行命令:powershell Set-ExecutionPolicy RemoteSigned

x64

打开C:\Windows\system32\cmd.exe 运行命令powershell Set-ExecutionPolicy RemoteSigned

您可以使用检查模式

在 CMD 中:echo %PROCESSOR_ARCHITECTURE% 在 Powershell 中:[Environment]::Is64BitProcess

希望对你有帮助。

【讨论】:

以上是关于.ps1 无法加载,因为此系统上禁用了脚本的执行的主要内容,如果未能解决你的问题,请参考以下文章

electron - node.js - ng : 无法加载文件路径\ng.ps1,因为在此系统上禁用了运行脚本

NPM 安装的应用程序(例如文件 C:\Users\name\AppData\Roaming\npm\ng.ps1)无法加载,因为在此系统上禁用了运行脚本 [关闭]

PowerShell 说“在这个系统上禁用了脚本的执行”。

pycharm:无法加载文件activate.ps1,因为在此系统上禁止运行脚本,Windows10系统

pycharm:无法加载文件activate.ps1,因为在此系统上禁止运行脚本,Windows10系统

yarn : 无法加载文件 C:UsersLAppDataRoaming pmyarn.ps1,因为在此系统上禁止运行脚本