XX.ps1 cannot be loaded. The file XX.ps1 is not digitally signed.

错误详情

2025-08-20 11:17:38.546 File XX.ps1 cannot be loaded. The file XX.ps1 is not digitally signed. You cannot run this script on the current system. For more information about running script
s and setting execution policy, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
+ CategoryInfo : SecurityError: (😃 [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnauthorizedAccess

执行策略

要想知道发生这个错误的原因,我们需要先了解什么是执行策略。
powershell脚本在计算机上的执行权限是根据执行策略来决定的。系统的五种执行策略分别是:

  • Restricted‌ 阻止运行所有脚本文件,但允许在PowerShell环境中执行单个命令。
  • AllSigned‌ 要求所有脚本和配置文件必须由受信任的发布者签名才能运行,否则被阻止
  • RemoteSigned 仅要求从Internet下载的脚本签名,本地创建的脚本无需签名即可运行
  • Unrestricted‌ 允许运行所有脚本,但对于未签名的脚本会发出警告,不强制签名要求
  • Bypass‌ 无任何限制,所有脚本可直接运行,且不显示警告或提示

执行策略中另一个很重要的概念是应用范围。执行策略的应用范围按从大到小分别是:

  • MachinePolicy 由计算机的组策略设置,影响整个计算机的所有用户
  • LocalMachine 策略对所有用户生效,是默认范围
  • UserPolicy 由用户的组策略设置,仅影响当前登录用户
  • CurrentUser 策略仅对当前用户生效,不影响其他用户
  • Process 策略仅在当前PowerShell会话中有效,会话关闭后丢失

了解了这些概念,发生本文的错误的原因就很明显了,权限不够。当前的脚本文件需要签名才能执行。

更多更详细的执行策略信息可以查看官方文档
执行策略

解决办法

这个问题有两种解决办法。

方法一:修改系统的执行策略

执行策略用命令有:

  • Get-ExecutionPolicy 检查计算机上当前的执行策略设置
  • Get-ExecutionPolicy -List 列出所有范围的执行策略设置。
  • Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser 更改执行策略

我们此处可以使用Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass更改进程的策略。
或者
-Scope 后的参数为应用范围,修改范围从小到大,直到可以执行该脚本。

方法二:为当前脚本添加签名

对于需要经常或者周期性运行的脚本,最好的办法不是方法一,而是为该脚本添加签名。办法如下:

  1. 将该脚本放在目录a中,目录a建议为非c盘的目录。
  2. 在同目录下新建脚本b,脚本内容如下:
# 署名用の証明書を作成
$cert = New-SelfSignedCertificate `
        -Subject "CN=PowerShellスクリプト署名用証明書" `
        -KeyAlgorithm RSA `
        -KeyLength 2048 `
        -Type CodeSigningCert `
        -CertStoreLocation Cert:\CurrentUser\My\ `
        -NotAfter ([datetime]"2099/01/01")
# 信頼済みのルートとして使用
Move-Item "Cert:\CurrentUser\My\$($cert.Thumbprint)" Cert:\CurrentUser\Root
 
# 証明書への参照を取得
$rootcert = @(Get-ChildItem cert:\CurrentUser\Root -CodeSigningCert)[0]
# スクリプトに署名
Set-AuthenticodeSignature 目录a\脚本c.ps1 $rootcert

脚本c为想要签名的脚本名。

  1. 运行脚本b,是否追加签名的提示框选是。
  2. 执行完成,打开脚本c,可以看到在脚本的最末,追加了签名信息
# SIG # Begin signature block
# MIIFwwYJKoZIhvcNAQcCoIIFtDCCBbACAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
......
# KvIxsnAoqyKtoZhUDdRCMKXIf4xrlis7oE2vOkFuclKG2aunvPkmSTSKYMk8EfXU
# uIeyoVBka5WecXZnF2NswfwIWqP4WOqIkmLpFv/DpWTbJ4jFRtRCoHKCNIJLOBck
# TuxxqeuObdgikOnvSnVjP8x4x7rWbnrCa1ofkatGt4ffdBqMmZDDaJYY7/vNVxub
# L0mK4z7VSaI2BAVUGhlY79Tr2X0tSdI3fwE2wvRE5AhCIZRfaCxt
# SIG # End signature block
  1. 签名完成后,脚本c可以复制到当前计算机的任意为止执行。

参考链接

PowerShell 実行時の「デジタル署名されていません」エラーの対処法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值