当我试图执行我的PowerShell脚本时,我得到这个错误。
C:\Common\Scripts\hello.ps1文件不能被加载,因为在这个系统上脚本的执行被禁止。请参阅"get-help about_signing"了解更多细节。
在第1行char:13
- .\hello.ps1 <<<<
- CategoryInfo : 未指定。(:) [], PSSecurityException
- FullyQualifiedErrorId : RuntimeException
1.用"以管理员身份运行"选项启动Windows PowerShell。只有计算机上Administrators组的成员可以改变执行策略。
2.2.通过输入以下内容启用运行未签署的脚本
set-executionpolicy remotesigned
这将允许运行你在本地计算机上编写的未签名的脚本和来自互联网的有签名的 脚本。
请参阅 Microsoft TechNet Library 的 Running Scripts。
默认的执行策略被设置为限制性的,你可以通过输入看到。
Get-ExecutionPolicy
你应该键入以下内容,使其进入非限制模式。
Set-ExecutionPolicy unrestricted
希望这有帮助
我们可以通过下面的命令获取当前执行策略的状态。
Get-ExecutionPolicy;
默认情况下,它是限制。 为了允许执行PowerShell脚本,我们需要将ExecutionPolicy设置为Bypass或Unrestricted。
我们可以使用下面的PowerShell命令将当前用户的策略设置为 "旁路 "或 "不受限制"。
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Bypass -Force;
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force;
不受限制策略会加载所有配置文件并运行所有脚本。 如果运行从互联网下载的未签名的脚本,在运行前会提示你获得许可。
而在Bypass策略中,没有任何东西被阻止,在脚本执行过程中也没有警告或提示。 Bypass ExecutionPolicy比Unrestricted更宽松。
根据Windows版本和配置的不同,即使在 "非限制 "模式下,你也可能会收到以下警告。
安全警告
只运行你信任的脚本。 虽然来自互联网的脚本可能是有用的,但这个
脚本可能会对你的电脑造成潜在的伤害。 如果你信任这个脚本,请使用
Unblock-File cmdlet允许脚本在没有这个警告信息的情况下运行。 解除阻塞-文件子程序允许脚本在没有这个警告信息的情况下运行。 你想运行吗? 你想运行吗? [D] 不运行 [R] 运行一次 [S] 暂停 [?] 帮助 (默认是"D")
解决方法是使用"旁路".策略,通过以下命令启用:"旁路"。 策略,使用以下命令启用。
Set-ExecutionPolicy Bypass
来自文件。
旁路。 没有任何东西被阻止,也没有警告或提示。
这显然是不安全的,请理解其中的风险。
一个注册表键与: Windows注册表编辑器5.00版
[HKEY_LOCAL_MACHINESOFTWARE/Policies/Microsoft/Windows/PowerShell]
"EnableScripts"=dword:000001 "ExecutionPolicy"="Bypass"
和。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\PowerShell]
"EnableScripts"=dword:00000001 "ExecutionPolicy"="Unrestricted"
确实也能用。
由于某种原因,PowerShell cmdlet没有启用全局的本地执行,只是针对本地用户上下文。 例如,如果我试图从CygWin'的bash提示符内启动一个Powershell脚本,它在自己的用户上下文下运行,它将无法运行,给出了"is not digitally signed" 错误。 答案是进入本地组策略编辑器->。 本地计算机策略->。 管理模板->管理模板->。 Windows Components -> Windows PowerShell,双击'打开脚本执行'。 这就可以让我把它改成'Enabled'。 然后执行策略为"允许本地脚本和远程签名脚本"。 并让它在全球范围内工作,而不考虑用户的上下文。
接受的答案是对的,但策略修改只对当前运行的Powershell实例有效,也就是说一旦关闭Powershell的实例。 策略将被重置。 如果用户重新打开另一个Powershell实例,将应用默认策略,即 "限制"。
对于我来说,我需要使用VisualStudio Code控制台和cygwin的g++来构建东西。 控制台使用的是Powershell,使用默认的策略,什么都做不了。 一种解决方案是每次在VisualStudio Code控制台启动控制台时改变策略,也许可以用脚本改变策略。
我很懒,所以另一个解决方案是当我在管理员模式下运行Powershell时,与接受的答案类似。
但有一个额外的参数,改变注册表中的值。
一旦它被完成。
其他Powershell实例将默认使用RemoteSigned
策略。
set-executionpolicy remotesigned -Scope CurrentUser
。