Создать чистый модуль PowerShell Nuget для PowerShellGet

Что я хочу

Я хочу опубликовать ряд скриптов PowerShell в виде пакета Nuget для использования в системах сборки.

Я хочу использовать PowerShellGet для выполнения установки и управления версиями.

Я не хочу, чтобы эти сценарии были частью какого-либо решения Visual Studio, а как отдельные сценарии.

Сценарий использования

В любой системе с настроенным провайдером Nuget пользователь выполняет:

Install-Module MyModule

С этого момента все экспорты из этого модуля постоянно доступны для этого пользователя. Также пользователь может вызвать эту команду еще раз, чтобы обновить версию этих скриптов.

Что я сделал

Вы можете найти текущее состояние пакета здесь: GitHub

  1. Я добавил и настроил провайдера Nuget на наш локальный сервер Nuget

    Для этого звоните Get-PackageProvider -Name NuGet -ForceBootstrap а также Set-PSRepository -Name My_Nuget_Repo -SourceLocation http://my-nuget/api -InstallationPolicy Trusted

  2. Создан соответствующий модуль, который можно импортировать локально Import-Module
  3. Создан и опубликован пакет Nuget с этим модулем

проблема

Я могу установить этот пакет Install-Module Командлет и я вижу это позже в Get-InstalledModule список.

Но никакие функции не доступны.

Кроме того, несмотря ни на что, но Install-Module не вызывает ни один из скриптов из моего пакета:

  • Не звонит ScriptsToProcess от MyModule.psd1
  • Не звонит Install.ps1 от tools папка
  • Не звонит Init.ps1 от tools папка
  • Командлеты, экспортированные модулем, недоступны, и модуль не может быть импортирован Import-Module

(Тот же пакет работает правильно при установке из Visual Studios Install-Package MyModule, скрипты вызываются, модуль PowerShell импортируется).

изучение

поскольку PowerShellGet основывается на OneGet кажется, что проблема в Install-Package командлет (который вызывается внутри Install-Module Командлет).

Когда я выполняю Install-Package MyModule из Visual Studio Install.ps1 а также Init.ps1 называются. Но та же команда из чистого PowerShell ничего не делала.

1 ответ

Решение

После долгого обратного инжиниринга я нашел причину

Техническая причина

Волшебный тег PSModule должен быть добавлен к <Tags> в файле nuspec.

Реальная причина

Вы не должны создавать файл nuspec и упаковывать пакет nuget вручную. использование Publish-Module командлет вместо.

Как сделать это правильно

Я обновил модуль powershellget-GitHub с помощью:

  • Пример минимального модуля, который можно опубликовать
  • Способ использования локальной папки в качестве канала Nuget
  • Публикация, установка и использование этого модуля
  • Справочный скрипт без зависимостей, который все делает локально, так что вы можете изучить его

Проверьте это.

Другие вопросы по тегам