问题描述
在 powershell 或者 windows 终端中运行脚本文件时,提示“无法加载文件 因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.m
icrosoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。”
PS C:\Users\ciels\Desktop> .\test.ps1
.\test.ps1 : 无法加载文件 C:\Users\ciels\Desktop\test.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.m
icrosoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 1
+ .\test.ps1
+ ~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [],PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
问题原因
PowerShell 或者 windows 终端启动时,为了确保安全,文件的执行策略默认设置为 Restricted 。 Restricted 执行策略不允许任何脚本运行。
有关文件的执行策略可参考:
其中写到:Restricted 执行策略允许单独的命令,但不允许任何脚本运行,将阻止运行所有脚本文件,包括格式设置和配置文件 (.ps1xml
) 、模块脚本文件 (.psm1
) 和 PowerShell 配置文件 (.ps1
) 。
而 AllSigned 和 RemoteSigned 执行策略可防止 Windows PowerShell 运行没有数字签名的脚本。
AllSigned 要求所有脚本和配置文件都由受信任的发布者签名,包括在本地计算机上编写的脚本。
Bypass 没有任何内容被阻止,也没有警告或提示。
Default 默认执行策略。Windows客户端受限或Windows服务器远程登录。
RemoteSigned 要求从Internet下载的所有脚本和配置文件都由受信任的发布者签名。Windows server计算机的默认执行策略。
Restricted 不加载配置文件或运行脚本。Windows客户端计算机的默认执行策略。
Undefined 没有为作用域设置执行策略。从未由组策略设置的范围中删除分配的执行策略。如果所有作用域中的执行策略都未定义,则有效的执行策略将受到限制。
Unrestricted 从PowerShell 6.0开始,这是非Windows计算机的默认执行策略,无法更改。加载所有配置文件并运行所有脚本。如果您运行的是从internet下载的未签名脚本,则在运行之前系统会提示您输入权限。
解决方法
因此只需要降低安全性等级,将执行策略改为 RemoteSigned 即可执行脚本,在窗口中使用 Set-ExecutionPolicy 命令即可。
关于 Set-ExecutionPolicy 命令可参考:
具体方法
以管理员身份打开 PowerShell 或者 windows 终端,执行命令 set-executionpolicy remotesigned 并确认。
set-executionpolicy remotesigned
然后再次运行该脚本文件即可通过。
恢复默认设置
通过修改将降低系统的安全性,可能带来被病毒或恶意软件攻击的风险。
因此,在执行完自己编写的脚本文件后,可以将设置改回默认,执行以下命令即可 set-executionpolicy Restricted
set-executionpolicy Restricted
同样需要进行确认。
其他
如果需要了解计算机上的现用执行策略,可以打开PowerShell 然后输入 get-executionpolicy
get-executionpolicy
更多关于执行策略的设置,可以参阅Set-ExecutionPolicy (Microsoft.PowerShell.Security) - PowerShell | Microsoft Docs进行配置。
参考链接:
https://www.jianshu.com/p/4eaad2163567
https://blog.csdn.net/Gabriel_wei/article/details/102449719