PowerShell 脚本数字签名错误

use*_*720 3 powershell code-signing powershell-2.0 powershell-3.0

运行 PowerShell 脚本时出现错误:

无法加载文件 test_new.ps1。文件 test_new.ps1 没有数字签名。

我创建了一个 CA 和一个证书,并使用这里描述的过程签署了这个文件。

这是我dirMY目录上做的时候:

EF76B3D7D8D2406E1F2EE60CC40644B122267F18 CN=PowerShell 用户

我可以看到test_new.ps1文件末尾附加的签名块。

以下是执行政策和范围:

        范围执行策略
        ----- ---------------
MachinePolicy 已签名
   用户策略未定义
      进程绕过
  当前用户全部签名
 本地机器未定义

machinepolicy 应优先设置为AllSigned. 一切似乎都很好,为什么我仍然收到数字签名错误。

Gom*_*ome 8

设置为 Allsigned 的 Powershell 执行策略仅运行由受信任发布者签名的脚本。您可以在下面找到 -ExecutionPolicy 参数的可能值:

受限:默认设置,不加载配置文件或运行脚本。

AllSigned:要求所有脚本和配置文件都由受信任的发布者签名,包括您在本地计算机上编写的脚本。

RemoteSigned:要求所有从 Internet 下载的脚本和配置文件都由受信任的远程发布者签名。

无限制:加载所有配置文件并运行所有脚本。如果您运行从 Internet 下载的未签名脚本,则会在运行前提示您获得许可。

绕过:没有被阻止,也没有警告或提示。

Undefined:从当前作用域中移除当前分配的执行策略,将会话返回到默认值。此参数不会删除在 Active Directory 组策略中设置的执行策略。

您可以通过以下命令设置 PowerShell 执行策略:

Set-ExecutionPolicy 不受限制

如果您想在域网络上运行脚本,那么您可能会使用组策略来确保用于签署脚本的代码签名证书是您域中受信任的发布者。要做到这一点,有两个步骤:

  1. 导出代码签名证书。

  2. 创建策略并将代码签名证书导入受信任的发布者。

在您的域网络中更新策略后,可信发布者证书应列在证书管理单元下的“可信发布者”中。


Aja*_*rla 5

要修复此问题,您必须运行以下命令来运行 Set-ExecutionPolicy 并更改执行策略设置。

Set-ExecutionPolicy -Scope Process -ExecutionPolicy 绕过


use*_*720 3

最后找到了解决这个问题的方法:

$cert = Get-ChildItem cert:\CurrentUser\MY
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store ("TrustedPublisher" , "LocalMachine")
$store.Open("ReadWrite")
$store.Add($cert)
$store.Close()
Run Code Online (Sandbox Code Playgroud)

它必须在TrustedPublisher商店中发布才能发挥作用。