如何通过内网服务器签名PowerShell脚本,实现客户端免改执行策略运行?
解决封闭企业环境PowerShell脚本签名部署问题
核心方案:利用本地CA生成代码签名证书签名脚本
公司本地CA完全可以生成Windows执行策略认可的代码签名证书,按以下步骤操作即可实现无需修改执行策略运行脚本:
1. 确认并配置CA代码签名证书模板
- 登录公司本地CA服务器,打开「证书颁发机构」控制台
- 检查是否存在代码签名模板,若没有,右键「证书模板」→「新建」→「要颁发的证书模板」,选择「代码签名」模板(默认已存在)
- 配置模板权限:确保负责签名脚本的账号拥有「注册」和「读取」权限
2. 申请代码签名证书
- 在用于签名脚本的服务器/工作站上,打开PowerShell执行:
Get-Certificate -Template CodeSigning -CertStoreLocation Cert:\CurrentUser\My - 若需要跨机器签名,可通过MMC证书控制台导出带私钥的PFX文件(记得设置强密码),在目标签名机器导入
3. 确保所有工作站信任本地CA根证书
- 因为你的环境中用户和工作站已通过本地CA认证,根证书应该已自动部署到所有机器的「受信任的根证书颁发机构」存储
- 若个别机器未部署,手动导入CA根证书到该存储即可
4. 签名PowerShell脚本
- 在拥有代码签名证书的机器上,执行签名命令:
# 获取当前用户存储中的代码签名证书 $signingCert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert # 签名目标脚本 Set-AuthenticodeSignature -FilePath "C:\Path\To\FixScript.ps1" -Certificate $signingCert
5. 验证并执行脚本
- 验证签名有效性:
确保Get-AuthenticodeSignature "C:\Path\To\FixScript.ps1"Status字段显示Valid - 目标工作站执行脚本时,只要执行策略为
AllSigned或RemoteSigned(企业环境默认配置),即可直接运行签名后的脚本,无需修改执行策略
旧版PowerShell兼容说明
- 即使是PowerShell v2,同样支持Authenticode签名验证,只要证书合法且CA根证书被信任,就能正常运行签名脚本
- 绝对不要使用
-ExecutionPolicy Bypass或修改注册表等绕过方式,既不安全也不符合企业安全规范
内容的提问来源于stack exchange,提问作者Autis'Tech'
相关产品推荐
相关产品推荐

