我运行此代码以从 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 窗体)应用程序中运行良好。
RunspaceFactory.CreateRunspace
时,您可以提供一个 InitialSessionState
,您可以在其中将 ExecutionPolicy
设置为 ExecutionPolicy.Unrestricted
。
由于 execution policy,您的脚本被阻止执行。
您需要以管理员身份运行 PowerShell 并将其在客户端 PC 上设置为无限制。您可以通过调用 Invoke 来做到这一点:
Set-ExecutionPolicy Unrestricted
在某些情况下,您可以按照其他答案中建议的步骤进行操作,验证执行策略是否设置正确,但脚本仍然会失败。如果您遇到这种情况,您可能在 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 -ExecutionPolicy RemoteSigned
可能还有一种方法可以为 ASP.NET 用户设置它,但是这种方法意味着您不会打开整个系统,而只是打开您的应用程序。
(Source)
您需要运行 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.
我有一个类似的问题,并注意到 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
我希望这可以帮助你。
尝试这个:
Set-ExecutionPolicy -scope CurrentUser Unrestricted
RemoteSigned
。如果这不起作用,那么重新评估您的痛点是什么以及为什么它不起作用。您可以将无限制设置为最后的手段,但它不应该是您的起点。