核心是配置PowerShell执行策略为AllSigned并配合数字签名机制,确保仅受信任证书签名的脚本可运行;需通过gpedit.msc启用组策略(专业版及以上),导入证书至“受信任的发布者”,并用Set-AuthenticodeSignature签名脚本。
要在 windows 上通过本地安全策略启用严格的脚本执行防护,核心是配置 powershell 执行策略为 allsigned,并配合数字签名机制,确保只有经可信证书签名的脚本才能运行。这比 remotesigned 更严格,能有效防止未授权或篡改脚本执行。
确认系统支持并启用组策略编辑器
该方法仅适用于 Windows 专业版、企业版或教育版(家庭版不包含 gpedit.msc)。若系统为家庭版,需先升级或改用注册表/PowerShell 命令方式替代。
- 按 Win + R,输入
gpedit.msc,回车打开“本地组策略编辑器” - 若提示找不到命令,说明当前版本不支持——可跳至下一部分使用 PowerShell + 注册表方式实现等效效果
配置 PowerShell 执行策略为 AllSigned
组策略优先级高于 PowerShell 命令设置,适合统一管控且防用户绕过。
- 依次展开:计算机配置 → 管理模板 → Windows 组件 → Windows PowerShell
- 双击右侧的“启用脚本执行”策略
- 勾选“已启用”,在下方下拉菜单中选择AllSigned
- 点击“确定”保存;无需重启,但需重启 PowerShell 窗口使策略生效
部署可信代码签名证书
AllSigned 策略生效后,所有 .ps1 脚本必须由受信任的证书签名,否则直接报错拒绝执行。
- 从企业内部 CA 或可信第三方(如 DigiCert、Sectigo)获取用于代码签名的证书
- 将证书导入当前计算机的“受信任的发布者”证书存储区(非当前用户)
- 使用
Set-AuthenticodeSignature对脚本签名,例如:Set-AuthenticodeSignature -FilePath C:\Scripts\deploy.ps1 -Certificate $cert - 签名后可通过
Get-AuthenticodeSignature验证状态,显示Valid才代表可执行
验证与日常管理要点
策略启用后需持续维护,避免因签名失效或证书过期导致运维中断。
- 运行
Get-ExecutionPolicy -List查看各作用域策略,确认 MachinePolicy 显示 AllSigned(表示组策略已接管) - 普通用户无法通过
Set-ExecutionPolicy覆盖 MachinePolicy,这是安全设计的关键 - 临时调试可用
powershell -ExecutionPolicy Bypass -File script.ps1,但禁止用于生产环境 - 建议搭配 AppLocker 或 WDAC 进一步限制脚本执行路径,形成纵深防御

















