#执行策略
#简介
执行策略(Execution Policy)是 Windows 上的一项安全功能,用于控制在 PowerShell 中运行脚本的条件。它主要用于防止误执行脚本,而不是阻止恶意用户绕过限制。
执行策略分为多个作用域,可以在不同层级上分别设置。
#查看执行策略
查看当前生效的执行策略:
> Get-ExecutionPolicy
查看所有作用域的策略:
> Get-ExecutionPolicy -List
输出会列出 MachinePolicy、UserPolicy、Process、CurrentUser 和 LocalMachine 等作用域。未显式设置的作用域显示为 Undefined。
#作用域
| 作用域 | 说明 |
|---|---|
Process | 仅对当前 PowerShell 进程有效,关闭后失效 |
CurrentUser | 仅对当前用户有效 |
LocalMachine | 对本地计算机上的所有用户有效,通常需要管理员权限 |
MachinePolicy | 由组策略设置,优先级最高 |
UserPolicy | 由当前用户的组策略设置 |
当多个作用域同时设置时,优先级从高到低通常为:MachinePolicy、UserPolicy、Process、CurrentUser、LocalMachine。
#设置执行策略
为当前用户设置 RemoteSigned:
> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
仅为当前会话临时设置 Bypass:
> Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
为本地计算机设置策略,需要以管理员身份运行:
> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
将当前用户的策略恢复为未定义:
> Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope CurrentUser
#常见策略类型
| 策略 | 说明 |
|---|---|
Restricted | 不允许运行脚本,只允许执行单条命令 |
RemoteSigned | 本地脚本可以运行;从 Internet 下载的脚本需要有效签名 |
Unrestricted | 不限制脚本运行,不建议在生产环境使用 |
Bypass | 不阻止任何操作,也不显示警告或提示 |
AllSigned | 所有脚本都必须由受信任的发布者签名 |
Undefined | 未设置策略,由更高优先级或系统默认值决定 |
RemoteSigned 是 Windows 客户端上较常用的折中方案。从 Internet 下载的脚本可能带有“来自 Internet”的标记,可以使用 Unblock-File 解除阻止:
> Unblock-File -Path ./script.ps1
#注意事项
Set-ExecutionPolicy -Scope Process只影响当前会话,适合临时运行可信脚本。- 组策略设置的策略会覆盖用户手动设置。
- 在 Linux 和 macOS 上,运行脚本主要受文件权限和 shebang 影响,与执行策略无关。
- 修改
LocalMachine作用域前应评估对整台计算机上其他用户的影响。