.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。
对每个目录重复这些步骤:
- 导航到WindowsPowerShell \ v1.0并启动powershell.exe
-
检查ExecutionPolicy的当前设置:
Get-ExecutionPolicy -List
-
设置你想要的级别和范围的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
我希望这可以帮助你。