Win命令:PowerShell
2024/8/8大约 3 分钟
PowerShell ExecutionPolicy 执行策略
执行策略是 PowerShell 的安全防护机制,用于控制 PowerShell 是否可以加载配置文件、运行脚本。
⚠️ 重要提醒:它不是操作系统级别的安全权限,不能阻止用户手动复制代码粘贴执行,仅限制.ps1脚本文件的运行。
1. 策略类型
| 策略 | 说明 | 适用场景 |
|---|---|---|
Restricted | 默认策略。允许交互式单行命令;禁止运行任何 ps1 脚本文件(本地、下载脚本全部拦截)。 | 普通终端用户,不使用PowerShell脚本的设备 |
RemoteSigned | 本地创建的脚本可直接运行; 互联网下载获取的脚本,必须带有可信数字签名才能执行。 | 开发机推荐策略,最常用 |
AllSigned | 所有脚本(本地 + 网络下载)都必须拥有可信数字签名,无签名直接拦截。 | 生产服务器、高安全环境 |
Bypass | 不做任何签名校验,全部放行,无安全提示。风险较高,仅用于临时调试。 | 单次临时脚本执行,不建议长期默认 |
Undefined | 当前作用域未配置执行策略,会继承上层作用域的策略。 当全部作用域都是 Undefined,PowerShell 回退到内置默认策略 Restricted。 | 未手动设置策略时的系统出厂状态 |
补充:
Unrestricted
和 RemoteSigned 类似,从网络下载的脚本会弹出警告,但不强制要求数字签名,旧版PowerShell使用较多。
2. 作用域 Scope(优先级从高到低)
执行策略支持多作用域配置,高优先级作用域会覆盖低优先级。
| Scope | 说明 | 修改权限 |
|---|---|---|
Process | 仅当前PowerShell会话窗口生效,关闭窗口自动恢复,不写入任何配置。 | 无需管理员 |
CurrentUser | 仅当前登录用户生效,写入当前用户注册表。 | 一般不需要管理员 |
LocalMachine | 本机所有用户全局生效,写入机器注册表。 | 必须管理员权限 |
UserPolicy | 用户组策略配置,由域管理员下发,用户不可覆盖。 | 域环境 |
MachinePolicy | 计算机组策略配置,由域管理员下发,优先级最高,用户不可覆盖。 | 域环境 |
查看所有作用域策略:
Get-ExecutionPolicy -List最终生效策略 = 优先级最高作用域的策略。
3. 常用命令
查看当前生效策略
Get-ExecutionPolicy设置执行策略
# 当前用户生效(推荐)
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
# 本机全局所有用户生效(管理员)
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
# 仅当前会话临时生效,关闭窗口自动复原
Set-ExecutionPolicy Bypass -Scope Process -Force参数
-Force:跳过确认提示,脚本自动化场景使用。
恢复默认策略
Set-ExecutionPolicy Restricted -Scope CurrentUser4. 单次临时绕过(不修改系统策略)
启动PowerShell进程时单独指定策略,只对本次执行生效,不会修改注册表。
# 直接执行脚本文件
powershell -ExecutionPolicy Bypass -File "D:\path\script.ps1" 参数5. 常见误区
- ❌ ExecutionPolicy 是系统权限
✅ 真相:只是PowerShell脚本运行规则,不能阻止手动粘贴代码执行,不等同于文件ACL权限。 - ❌ 修改策略后,已经打开的终端立刻生效
✅ 真相:已打开的终端不会加载新策略,修改后需要关闭所有PowerShell窗口,重新打开。 - ❌ CMD不受执行策略影响
✅ 真相:CMD本身没有PowerShell脚本限制;但在CMD中调用powershell去执行ps1脚本,依然会触发ExecutionPolicy校验。
6. 安全建议
- 个人开发环境推荐使用
RemoteSigned; Bypass只用于单次临时调试,不要长期作为默认策略;- 生产服务器优先
AllSigned; - 域环境下,组策略(UserPolicy/MachinePolicy)优先级最高,本地Set命令无法覆盖。
