ChatGPT解决这个技术问题 Extra ChatGPT

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

我运行此代码以从 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 -scope LocalMachine 再次输入 Y 表示是所以,享受
这不应该是重复的,在这个问题中,我们正在创建自己的运行空间。在重复中,我们在普通的 powershell 运行空间中运行,对于那些发现这个问题的人,当您调用 RunspaceFactory.CreateRunspace 时,您可以提供一个 InitialSessionState,您可以在其中将 ExecutionPolicy 设置为 ExecutionPolicy.Unrestricted

P
Peter Mortensen

由于 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年后仍然有用
效果很好,没有太多麻烦。
J
Jon Crowell

在某些情况下,您可以按照其他答案中建议的步骤进行操作,验证执行策略是否设置正确,但脚本仍然会失败。如果您遇到这种情况,您可能在 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 用户来运行脚本,而是使用了另一个帐户(服务帐户)。我必须以该帐户登录并取消限制该用户的脚本。
M
Matthew Steeples

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

Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned

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

(Source)


这适用于 Windows 10 的 VScode PowerShell 控制台
P
Peter Mortensen

您需要运行 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.

a
avolkmann

我有一个类似的问题,并注意到 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

我希望这可以帮助你。


B
Brended_99

尝试这个:

Set-ExecutionPolicy -scope CurrentUser Unrestricted

请阅读How do I write a good answer?。虽然此代码块可能会回答 OP 的问题,但如果您解释此代码与问题中的代码有何不同、您已更改的内容、更改的原因以及解决问题的原因,则此答案会更有用没有介绍别人。