我运行此代码以从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窗体)应用程序运行相同的代码。
答案 0 :(得分:127)
由于execution policy,您的脚本无法执行。
您需要以管理员身份运行PowerShell,并在客户端PC上将其设置为Unrestricted。您可以通过调用Invoke:
来实现Set-ExecutionPolicy Unrestricted
答案 1 :(得分:73)
在某些情况下,您可以按照其他答案中建议的步骤进行操作,验证是否已正确设置执行策略,但脚本仍然失败。如果您遇到这种情况,您可能位于具有32位和64位版本PowerShell的64位计算机上,并且失败发生在未设置执行策略的版本上。 该设置不适用于两个版本,因此您必须明确设置两次。
在Windows目录中查找System32和SysWOW64。
对每个目录重复这些步骤:
检查ExecutionPolicy的当前设置:
Get-ExecutionPolicy -List
为所需的级别和范围设置ExecutionPolicy,例如:
Set-ExecutionPolicy -Scope LocalMachine Unrestricted
请注意,您可能需要以管理员身份运行PowerShell,具体取决于您尝试为其设置策略的范围。
您可以在此处阅读更多内容:Running Windows PowerShell Scripts
答案 2 :(得分:21)
问题是执行策略是基于每个用户设置的。每次运行它时,您都需要在应用程序中运行以下命令以使其正常工作:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
可能有一种方法可以为ASP.NET用户设置此项,但这意味着您不会打开整个系统,只打开您的应用程序。
(Source)
答案 3 :(得分:19)
您需要运行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.
答案 4 :(得分:1)
我遇到了类似的问题,并注意到Windows Server 2012上的默认cmd运行的是x64版本。
对于Windows 7,Windows 8,Windows Server 2008 R2或Windows Server 2012,请以管理员身份运行以下命令:
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中:[环境] :: Is64BitProcess
我希望这对你有所帮助。