错误:PowerShell 模块中的安装包验证码颁发者

Posted

技术标签:

【中文标题】错误:PowerShell 模块中的安装包验证码颁发者【英文标题】:Error: Install-Package Authenticode issuer in PowerShell module 【发布时间】:2020-02-07 04:11:58 【问题描述】:

我们已经建立了一个 TFS 包存储库,用于托管内部开发的 PS 5.1 模块。在发布之前,我们使用 GoDaddy 代码签名证书对这些 POSH 模块进行签名。直到今天早上我们开始在

上出现以下提到的错误时,一切都运行良好
Install-Module -Name DeploymentHelpers -RequiredVersion 0.2.0 -Repository 'CI' -Force

我很肯定应用程序开发方面或证书方面没有任何改变。

这是我们得到的错误:

PackageManagement\Install-Package : Authenticode issuer 新模块的“System.Object[]” 版本为“0.2.0”的“DeploymentHelpers”不是 与验证码颁发者“System.Object[]”匹配 以前安装的模块“DeploymentHelpers” 版本“0.2.0”。如果您仍想安装或更新,请使用 -SkipPublisherCheck 参数。在 C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1772 字符:21 + ... $null = PackageManagement\Install-Package @PSBoundParameters + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ + CategoryInfo : InvalidOperation: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], 例外 + FullyQualifiedErrorId : AuthenticodeIssuerMismatch,Validate-ModuleAuthenticodeSignature,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage

我使用的是 Windows 2012 R2 和 TFS 2017.1

另外,这里是 CI 存储库的详细信息:

Register-PSRepository `
    -Name CI `
    -SourceLocation "http://tfs:8080/tfs/Projects/_packaging/CI/nuget/v2" `
    -PublishLocation 'http://tfs:8080/tfs/Projects/_packaging/CI/nuget/v2' `
    -PackageManagementProvider Nuget `
    -InstallationPolicy Trusted

有什么想法吗?

【问题讨论】:

我已经尝试过 SO post 中的建议答案,但没有运气。 您好,下面提供的解决方案怎么样?它可以帮助您解决问题吗?如果该解决方案适合您,您可以accept the answer 让其他 SO 用户知道该解决方案是否有效。如果错误仍然存​​在,请随时发表评论:-) 【参考方案1】:

新模块的验证码颁发者'System.Object[]' 版本为“0.2.0”的“DeploymentHelpers”与 先前安装的验证码颁发者“System.Object[]” 版本为“0.2.0”的模块“DeploymentHelpers”。

这是PowerShellGet v1.0.0.1 中存在的已知问题。您可以按照文件路径检查源验证脚本:C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1

首先,请关注函数Get-AuthenticodePublisher。这是第一个用于获取和验证模块的SignerCertificate 的函数。你可以分析它的脚本。用一句话表达这个逻辑是它沿着证书链走。这意味着,现在,您已被PowerShellGet 视为 “相同” 发布者,因为您提供的签名证书与正在检查的证书链中的签名证书相同。

现在,有 3 个解决方案供您参考。

第一个是添加错误消息中显示的参数: -SkipPublisherCheck。有了这个参数,它可以主动 忽略证书验证步骤。这样,错误就会消失。 第二种解决方案是修改文件PSModule.psm1,添加 脚本Select-Object -First 1 进入函数 Get-AuthenticodePublisher。正如我之前提到的,款待 由相同的证书引起。现在,使用Select-Object 就可以了 拿起第一个。 最后的解决办法是,你最好将PowerShellGet版本升级到latest,因为这样 逻辑问题已从 PowerShellGet v2.1.4: Module publisher verification 修复。

注意:如果选择第三个,需要注意requirements最新PowerShellGet版本:

【讨论】:

那么,如果我选择第三个选项,我需要同时满足这两个要求吗?因为我已经在代理上安装了 PowerShell 5.1。那我还需要安装 PowerShell Core 吗? @Sam。是的,这两个要求需要同时满足。 啊好吧!我必须恢复到第一个选项,因为此时我无法安装 POSH Core。谢谢! 我有一些时间让它工作起来没有任何问题。这是我所做的:Install-PackageProvider -Name NuGet -ForceInstall-Module -Name PowerShellGet -ForceUpdate-Module -Name PowerShellGet我的盒子上安装的 PowerShell 版本是 5.1。有了这个,我不需要 SkipPublisherCheck 谢谢! 即使在更新PowerShellGet 之后,我也遇到了Install-Module -Name Microsoft.Xrm.Tooling.CrmConnector.PowerShell 的问题...所以我不得不使用-SkipPublisherCheck

以上是关于错误:PowerShell 模块中的安装包验证码颁发者的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有管理员权限的 Azure Web 应用上安装 PowerShell 模块?

由于“无法初始化 PowerShell 主机”而无法安装 nuget 包

如何在 Windows PowerShell 中使用 pip 安装包

由于“无法初始化PowerShell主机”,无法安装nuget包

为啥安装sql Server 2008时总是显示windows powershell错误?

PHP动态扩展模块