.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)无法加载,因为在此系统上禁用了运行脚本 [关闭]
pycharm:无法加载文件activate.ps1,因为在此系统上禁止运行脚本,Windows10系统
pycharm:无法加载文件activate.ps1,因为在此系统上禁止运行脚本,Windows10系统
yarn : 无法加载文件 C:UsersLAppDataRoaming pmyarn.ps1,因为在此系统上禁止运行脚本