更改 Windows PowerShell 的执行策略
遇到“系统禁止运行脚本”时,先确认当前使用的是 Windows PowerShell 还是 PowerShell 7,并在同一个终端中检查策略。修改当前用户或当前进程的策略通常不需要管理员权限。
1. 查看生效策略和作用域
Get-ExecutionPolicy
Get-ExecutionPolicy -List
前者显示最终生效值,后者显示各作用域。优先级从高到低为:
MachinePolicy → UserPolicy → Process → CurrentUser → LocalMachine。
组织的组策略可能覆盖手动设置;即使某个作用域写入成功,最终生效值也不一定改变。
2. 选择修改范围
只想在当前终端运行本地脚本时,可使用进程级设置,关闭该终端后失效:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy RemoteSigned
需要长期运行当前用户的本地脚本时,先记录原值,再修改:
$previousPolicy = Get-ExecutionPolicy -Scope CurrentUser
$previousPolicy
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
按提示确认,再次执行 Get-ExecutionPolicy -List 和 Get-ExecutionPolicy。不要省略 -Scope;默认的 LocalMachine 会影响整台机器,并通常需要管理员权限。
3. 常见策略
| 策略 | 含义 |
|---|---|
| Restricted | 不运行脚本 |
| RemoteSigned | 本地脚本可运行;带互联网来源标记的脚本通常需要可信签名 |
| AllSigned | 本地和下载的脚本都需要可信签名 |
| Unrestricted | 允许运行,互联网来源的脚本可能有警告 |
| Bypass | 不执行策略检查,也不提供相应提示 |
| Undefined | 当前作用域没有设置,继续按其他作用域和系统默认值判定 |
默认值与系统版本、用途和已有配置有关,不应统一认定为 Restricted。执行策略也不是完整的安全边界;调整策略不会给脚本管理员权限。
如果仅一个已审查的下载脚本被来源标记阻止,可以针对这个文件处理,不必全局改为 Bypass:
Unblock-File -LiteralPath ".\reviewed-script.ps1"
请先把路径改为实际核实过的文件。
4. 恢复原设置
如果仍在记录 $previousPolicy 的同一终端中:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy $previousPolicy
也可以根据先前记录手动恢复。如果这个作用域原来是 Undefined,恢复为:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Undefined
Undefined 是移除该作用域的设置,不能保证最终策略一定变为某个固定值;最后再检查一次生效结果。
评论将在接近此处时加载,也可点击立即加载。