.ps1不能被加载,因为脚本的执行在这个系统上被禁用了?

我运行这个代码从asp.net应用程序执行power shell:

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(winform)应用程序运行良好。

您的脚本由于执行策略而被阻止执行。

您需要在客户端PC上将其设置为Unrestricted。 你可以通过调用Invoke来做到这一点

 Set-ExecutionPolicy Unrestricted 

在某些情况下,您可以按照其他答案中build议的步骤执行操作,validation执行策略设置是否正确,并且脚本仍然失败。 如果发生这种情况,那么您可能位于同时具有32位和64位版本的PowerShell的64位计算机上,并且在没有执行策略集的版本上发生故障。 该设置不适用于这两个版本 ,所以你必须明确地设置两次。

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

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

  1. 导航到WindowsPowerShell \ v1.0并启动powershell.exe
  2. 检查ExecutionPolicy的当前设置:

    Get-ExecutionPolicy -List

  3. 设置你想要的级别和范围的ExecutionPolicy,例如:

    Set-ExecutionPolicy -Scope LocalMachine Unrestricted

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

您可以在这里阅读更多内容: 运行Windows PowerShell脚本

问题是执行策略是在每个用户的基础上设置的。 每次运行应用程序时都需要在应用程序中运行以下命令以使其可用:

 Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned 

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

( 来源 )

你需要运行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,以pipe理员身份运行以下命令:

86

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

64位

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

您可以使用检查模式

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

我希望这可以帮助你。