首页/系统/Windows 运维速查/执行策略 ExecutionPolicy
PowerShell 基础66 条

执行策略 ExecutionPolicy

控制脚本执行许可:默认 Restricted 禁止运行 .ps1,是“脚本无法加载”类问题的第一大原因。

Windows 运维速查系统更新于 2026-10-13

执行策略是什么

执行策略决定当前环境允许运行哪些脚本:默认状态下脚本文件会被拦住,只允许交互式敲命令。它是「脚本无法加载」类报错的首要原因,报错信息通常直接提到执行策略字样。它按作用范围分层设置,从仅当前用户到整台机器由窄到宽,权限也依次提高。理解分层与继承关系,就能解释为什么改了设置仍然被拦——往往是更上层的作用范围覆盖了本地设置。需要强调的是它只是防误触的开关,不是安全边界。

基本信息

适用平台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未设置,继承上层用于查看分层继承结果
执行策略不是安全边界,它只防止无意执行脚本,无法阻挡有意绕过。放宽策略之前应先审查脚本内容与来源,把绕过当作常规手段会削弱整个环境的防护基线。
域环境里执行策略可能由组策略统一规定,本地设置会被覆盖。排查时先看分层列表,确认实际生效的是哪一层的值,再决定从本地还是从组策略侧调整。

易错点

  • 只改本地设置不看分层列表:上层作用范围与组策略会覆盖,改了看起来毫无效果
  • 长期使用绕过方式运行脚本:等于放弃这层防误触保护,应改为受信任脚本模式并评估签名
  • 把执行策略当安全机制:它可被有意绕过,需要真正的防护应靠权限、签名与应用控制策略
  • 忽略来自互联网的文件标记:下载的脚本会因此被拦,应先解除标记再审查内容
  • 在自动化任务里依赖交互式确认:无人值守场景需要提前把策略配置好,否则任务会卡住

数据来源与参考

  • Microsoft Learn:about_Execution_Policies

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌