#执行策略限制
在 Windows 上运行 .ps1 脚本时,经常遇到类似错误:
无法加载文件 C:\scripts\test.ps1,因为在此系统上禁止运行脚本。
这不是脚本本身的问题,而是 Windows PowerShell 的 执行策略(Execution Policy) 阻止了脚本运行。
#查看执行策略
> Get-ExecutionPolicy
Restricted
Restricted 表示禁止运行任何脚本。还可以查看各作用域的具体设置:
> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Restricted
执行策略按作用域生效,优先级从高到低依次为:MachinePolicy、UserPolicy、Process、CurrentUser、LocalMachine。
#修改当前用户的执行策略
推荐只修改当前用户,避免影响整台机器:
> Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
RemoteSigned允许运行本地创建的脚本;从网络下载的脚本必须有可信签名。CurrentUser作用域不需要管理员权限。- 修改后可以用
Get-ExecutionPolicy -List确认。
如果只是临时运行一次,可以只对当前进程生效:
> Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
也可以在不修改系统设置的情况下启动一个新会话:
> pwsh -ExecutionPolicy Bypass -File ./script.ps1
#安全提示
从网络下载的脚本可能被标记为“来自 Internet”,即使策略为 RemoteSigned 也会被拦截。确认文件可信后,可以解除锁定:
> Unblock-File -Path ./downloaded.ps1
#平台差异
执行策略只在 Windows 上生效。Linux 和 macOS 上的 PowerShell 不检查执行策略,脚本能否运行取决于文件权限和调用方式:
$ chmod +x ./script.ps1
$ ./script.ps1