执行策略是什么
执行策略决定当前环境允许运行哪些脚本:默认状态下脚本文件会被拦住,只允许交互式敲命令。它是「脚本无法加载」类报错的首要原因,报错信息通常直接提到执行策略字样。它按作用范围分层设置,从仅当前用户到整台机器由窄到宽,权限也依次提高。理解分层与继承关系,就能解释为什么改了设置仍然被拦——往往是更上层的作用范围覆盖了本地设置。需要强调的是它只是防误触的开关,不是安全边界。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 及以上 |
|---|---|
| 查看命令 | 查看当前生效值与全部分层值,后者能看到每一层的实际设置 |
| 设置命令 | 设置时需指定作用范围,仅当前用户不需要管理员权限 |
| 常用取值 | 仅限受信任脚本、远程签名、全部签名、绕过、不受限制 |
| 域环境 | 组策略下发的设置优先级高,本地修改可能不生效 |
| 临时运行 | 启动参数可临时指定策略,只影响本次会话 |
典型使用场景
- 首次运行自研脚本时被拦,需要放开当前用户的执行许可
- 确认当前生效值来自哪一层,排查「改了没用」的原因
- 临时执行一次来自外部的脚本,用会话级参数避免永久放宽
- 下载的脚本被标记为来自互联网而被拦截,解除标记后再评估
- 服务器上按规范统一设置,保证自动化任务可以无人值守运行
- 排查环境差异:同一脚本在开发机能跑、生产机被拦
常用示例
常用示例
# 查看当前生效的执行策略
Get-ExecutionPolicy
# 查看所有作用范围的设置,排查覆盖关系
Get-ExecutionPolicy -List
# 只放开当前用户(无需管理员)
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
# 临时运行一个脚本,不影响系统设置
powershell -ExecutionPolicy Bypass -File D:\scripts\run.ps1
# 查看文件是否带有来自互联网的标记
Get-Item D:\scripts\run.ps1 -Stream *
# 解除标记后再评估脚本内容
Unblock-File D:\scripts\run.ps1常见取值
| 取值 | 含义 | 适用 |
|---|---|---|
| Restricted | 禁止运行脚本文件 | 系统默认,仅交互命令 |
| RemoteSigned | 本地脚本可跑,外部脚本需签名 | 开发机常用折中方案 |
| AllSigned | 所有脚本都必须签名 | 合规要求较高的环境 |
| Bypass | 不拦截,也不提示 | 临时执行或受控自动化 |
| Unrestricted | 警告后允许运行 | 不推荐长期使用 |
| Undefined | 未设置,继承上层 | 用于查看分层继承结果 |
执行策略不是安全边界,它只防止无意执行脚本,无法阻挡有意绕过。放宽策略之前应先审查脚本内容与来源,把绕过当作常规手段会削弱整个环境的防护基线。
域环境里执行策略可能由组策略统一规定,本地设置会被覆盖。排查时先看分层列表,确认实际生效的是哪一层的值,再决定从本地还是从组策略侧调整。