Win11新安装后安全策略阻止运行未签名PS1文件,ExecutionPolicy设置无效
解决Windows下jenv.ps1未签名无法运行的问题
问题场景
尝试运行Windows版jenv时,遇到未签名脚本的安全错误,即使已将Process、CurrentUser、LocalMachine的执行策略设为Unrestricted/Bypass,错误仍存在:
PS > jenv SecurityError: File D:\sdk\JEnv-for-Windows-main\src\jenv.ps1 cannot be loaded. The file D:\sdk\JEnv-for-Windows-main\src\jenv.ps1 is not digitally signed. You cannot run this script on the current system. For more information about running scripts and setting execution policy, see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.
当前执行策略列表:
PS > Get-ExecutionPolicy -list Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Bypass CurrentUser Bypass LocalMachine Bypass
解决方案
1. 临时会话级绕过(最简单)
关闭当前PowerShell窗口,重新打开时使用以下命令启动:
powershell.exe -ExecutionPolicy Bypass
在这个新会话里直接运行jenv即可,此设置仅对当前会话生效,不会修改系统全局配置。
2. 解除脚本的下载锁定(常见原因)
如果脚本是从网上下载的,Windows会自动标记为"不安全",即使执行策略允许也会拦截:
- 右键
jenv.ps1文件,选择「属性」 - 在「常规」标签页底部,勾选「解除锁定」,点击「应用」→「确定」
- 重新运行脚本即可。
3. 给脚本添加自签名证书(长期方案)
如果需要长期使用该脚本,可以给自己的脚本添加自签名证书:
- 创建自签名证书:
New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=Your Name" -CertStoreLocation "Cert:\CurrentUser\My"
- 将证书导入信任根:
- 打开「管理用户证书」,找到「个人」→「证书」里刚创建的证书,右键→「所有任务」→「导出」,导出为CER格式
- 导入到「受信任的根证书颁发机构」→「证书」中
- 给脚本签名:
Set-AuthenticodeSignature -FilePath "D:\sdk\JEnv-for-Windows-main\src\jenv.ps1" -Certificate (Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert)
4. 检查组策略(排除全局限制)
虽然MachinePolicy和UserPolicy显示为Undefined,但仍可确认组策略是否有隐藏限制:
- 按下
Win+R输入gpedit.msc打开组策略编辑器 - 导航到「计算机配置」→「管理模板」→「Windows组件」→「Windows PowerShell」
- 找到「启用脚本执行」,确保设置为「未配置」或「允许所有脚本」
内容的提问来源于stack exchange,提问作者Kevin Barker
相关产品推荐
相关产品推荐

