如何让普通用户无需修改执行策略即可运行指定PowerShell脚本
解决Restricted执行策略下非管理员运行PowerShell脚本的方案
完全可以用自签名证书实现需求,既不用永久放开全局执行策略,也不用每次手动调整,只需完成一次配置即可让用户长期安全运行脚本。以下是具体操作步骤:
一、本地生成自签名代码签名证书
在你的电脑上以管理员权限打开PowerShell,执行以下命令生成证书(有效期可按需调整,示例设为10年):
# 创建自签名代码签名证书 $cert = New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=你的名称/组织标识" -KeySpec Signature -KeyUsage DigitalSignature -FriendlyName "PowerShell脚本签名证书" -NotAfter (Get-Date).AddYears(10) -CertStoreLocation "Cert:\CurrentUser\My" # 导出公钥证书(无需私钥)给用户导入 Export-Certificate -Cert $cert -FilePath "C:\指定路径\ScriptSigningCert.cer"
二、用户导入证书到信任存储(仅需操作一次)
用户拿到你发送的ScriptSigningCert.cer文件后,按以下步骤操作(无需管理员权限):
- 双击打开证书文件,点击「安装证书」
- 选择「当前用户」,点击「下一步」
- 选择「将所有证书放入下列存储」,点击「浏览」
- 选中「受信任的根证书颁发机构」,点击「确定」
- 依次点击「下一步」「完成」,确认导入成功
三、用户配置执行策略(仅需操作一次)
用户以普通权限打开PowerShell,执行以下命令设置当前用户的执行策略(比Restricted灵活,比Unrestricted安全):
# 设置当前用户执行策略为RemoteSigned(允许本地脚本运行,远程脚本需签名) Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
如果需要更严格的控制(仅允许签名脚本运行),可改为:
Set-ExecutionPolicy AllSigned -Scope CurrentUser -Force
四、给脚本签名并交付用户
在你的电脑上,用之前生成的证书给脚本签名:
# 获取签名证书 $signingCert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert | Where-Object {$_.FriendlyName -eq "PowerShell脚本签名证书"} # 给目标脚本签名 Set-AuthenticodeSignature -FilePath "C:\你的脚本路径\TargetScript.ps1" -Certificate $signingCert
将签名后的脚本发送给用户,用户只需双击脚本或在PowerShell中输入脚本路径即可直接运行,无需后续额外操作。
内容的提问来源于stack exchange,提问作者Petr Synek
相关产品推荐
相关产品推荐

