Невозможно опубликовать модуль PowerShell в локальном репо, который зависит от внешнего модуля

356
cyborgcommando0

Я написал и скомпилировал модуль PowerShell, который по сути является прославленной оболочкой модуля ActiveDirectory. Мой модуль также имеет правильный файл Манифеста модуля. Я также создал PSRepository, который размещен на сервере, и именно здесь я хотел бы разместить свой модуль.

Когда я запускаю следующую команду:

Publish-Module -Name ADWrap -Repository MyRepo -Tags ActiveDirectory -Force -Verbose 

Я получаю эту ошибку:

Publish-PSArtifactUtility: PowerShellGet не может разрешить зависимость модуля «ActiveDirectory» от модуля «ADWrap» от репозитория «MyRepo». Убедитесь, что зависимый модуль «ActiveDirectory» доступен в хранилище «MyRepo». Если этот зависимый модуль ActiveDirectory управляется извне, добавьте его в запись ExternalModuleDependencies в разделе PSData манифеста модуля.
На C: \ Program Files \ WindowsPowerShell \ Modules \ PowerShellGet \ 1.0.0.1 \ PSModule.psm1: 1227 char: 17
+ Publish-PSArtifactUtility -PSModuleInfo $ moduleInfo `
+ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [Publish-PSArtifactUtility ], InvalidOperationException
+ FullyQualifiedErrorId: UnableToResolveModuleDependency, Publish-PSArtifactUtility

В записи ExternalModuleDependencies не так много информации. Я искал Google и нашел эти сайты, которые немного помогли здесь

После генерации Манифеста модуля я сделал следующее, чтобы обновить его свойства:

Update-ModuleManifest -Path "\\Server\PowerShell Modules\ADWrap\Version 1.6.1\ADWrap\ADWrap.psd1" -ExternalModuleDependencies 'ActiveDirectory' 

Это дало мне то, что похоже на правильный способ включить код ExternalModuleDepencies, но я все еще получаю ошибку. Код PrivateData - это манифест модуля, который выглядит следующим образом:

# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell. PrivateData = @{  PSData = @{  # Tags applied to this module. These help with module discovery in online galleries. # Tags = @()  # A URL to the license for this module. # LicenseUri = ''  # A URL to the main website for this project. # ProjectUri = ''  # A URL to an icon representing this module. # IconUri = ''  # ReleaseNotes of this module # ReleaseNotes = ''  # External dependent modules of this module ExternalModuleDependencies = 'ActiveDirectory'  } # End of PSData hashtable  } # End of PrivateData hashtable 

Я не уверен, что мне не хватает, и я не много видел об этой проблеме в Интернете, поэтому любая помощь будет оценена.

0

1 ответ на вопрос

0
cyborgcommando0

Ну, я нашел что-то интересное. Этот ответ на PowerShell.org показал, что свойство ExternalModuleDependencies (которое я сгенерировал с помощью командлета Update-ModuleManifest) действительно было сгенерировано неправильно.

Я вручную открыл обновленный манифест модуля и изменил это:

 # External dependent modules of this module ExternalModuleDependencies = 'ActiveDirectory' 

к этому:

 # External dependent modules of this module ExternalModuleDependencies = @('ActiveDirectory') 

Похоже, что зависимость должна быть в формате массива. Почему это не просто генерируется автоматически, как это вне меня. После этого я смог опубликовать свой модуль!

Похожие вопросы