本地PowerShell仓库发布模块报模块清单无效错误的问题问询
故障复现与报错信息
操作步骤
- 执行以下命令创建本地PowerShell内部仓库:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $PSPath = \\repo.lab.local\PoShRepo$ $Repo = @{ Name = "PoShRepo" SourceLocation = $PSPath PublishLocation = $PSPath InstallationPolicy = "Untrusted" } Register-PSRepository @Repo
- 执行命令从PSGallery保存SecretStore模块到本地仓库路径,执行无异常:
# 注:原命令中SecretStore与-Path参数间遗漏空格,已补正 Save-Module -Name Microsoft.PowerShell.SecretStore -Path $PSPath -Repository PSGallery -Verbose -Force
- 执行命令尝试将模块发布到自建内部仓库:
Publish-Module -Path "$($PSPath)\Microsoft.PowerShell.SecretStore" -Repository PoShRepo -Force
报错内容
执行发布命令时返回以下错误:
Microsoft.PowerShell.Core\Test-ModuleManifest : 模块清单文件'C:\Users\admin\AppData\Local\Temp\4\704260633\Microsoft.PowerShell.SecretStore\Microsoft.PowerShell.SecretStore.psd1'中指定的RequiredModules条目'Microsoft.PowerShell.SecretManagement'无效,请将该条目更新为有效值后重试。
报错触发位置:C:\Program Files\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1144 char:27
- CategoryInfo : ObjectNotFound: (C:\Users\admin...ecretStore.psd1:String) [Test-ModuleManifest], DirectoryNotFoundException
- FullyQualifiedErrorId : Modules_InvalidRequiredModulesinModuleManifest,Microsoft.PowerShell.Commands.TestModuleManifestCommand
故障原因
Microsoft.PowerShell.SecretStore模块的清单文件中声明了对Microsoft.PowerShell.SecretManagement模块的强依赖,Publish-Module执行时会调用Test-ModuleManifest校验所有声明的依赖是否存在。- 你当前使用的是1.0.0.1版本的PowerShellGet模块,该版本校验逻辑不会自动拉取缺失依赖,只要本地环境或目标仓库中找不到声明的依赖项,就会直接抛出校验失败错误。
- 你之前只保存了SecretStore模块到本地路径,没有保存、发布其依赖的SecretManagement模块,是触发报错的直接原因。
修复方法
按顺序执行以下操作即可解决问题:
- 先将缺失的依赖模块从PSGallery保存到本地仓库路径
Save-Module -Name Microsoft.PowerShell.SecretManagement -Path $PSPath -Repository PSGallery -Verbose -Force
- 先发布依赖模块到你的内部PoShRepo仓库
Publish-Module -Path "$($PSPath)\Microsoft.PowerShell.SecretManagement" -Repository PoShRepo -Force
- 重新执行SecretStore模块的发布命令即可正常完成
Publish-Module -Path "$($PSPath)\Microsoft.PowerShell.SecretStore" -Repository PoShRepo -Force
可选优化:如果后续需要频繁发布带依赖的模块,可以将PowerShellGet模块升级到2.2.5及以上版本,确认依赖已存在于目标仓库时,发布命令可添加-SkipDependencies参数跳过依赖校验,提升发布效率。
内容的提问来源于stack exchange,提问作者CptRetro
相关产品推荐
相关产品推荐

