Как опубликовать модуль Powershell в Linux?

Курс я получил

PS /data/projects/lesspass-powershell> Publish-Module -Name "Lesspass" -Repository PSGallery -NuGetApiKey xxxxxxxxxxxxxxxxxxxx
Publish-Module : The specified module 'Lesspass' was not published because no module with that name was found in any module directory.
At line:1 char:1
+ Publish-Module -Name "Lesspass" -Repository PSGallery -NuGetApiKey oy ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (Lesspass:String) [Publish-Module], ArgumentException
+ FullyQualifiedErrorId : ModuleNotAvailableLocallyToPublish,Publish-Module

Макет проекта

Мой проект в $HOME/projects/lesspass-powershell

❯ tree
.
├── Lesspass-Clipboard.psm1
├── Lesspass-Clipboard.tests.ps1
├── Lesspass-Password.psm1
├── Lesspass-Password.tests.ps1
├── Lesspass-Profile.psm1
├── Lesspass-Profile.tests.ps1
├── Lesspass.psd1
├── Lesspass.psm1
├── Lesspass.tests.ps1
├── Lesspass-Validator.psm1
├── Lesspass-Validator.tests.ps1
├── LICENSE
├── makefile
├── PBKDF2_HMAC.cs
└── README.md

Вопрос

Как опубликовать модуль из моего текущего рабочего каталога?

2 ответа

  1. Я переименовал каталог моего проекта в Lesspass так как он должен совпадать с модулем, который вы хотите опубликовать
  2. Добавить каталог моего проекта в $Env:PSModulePath

    $Env:PSModulePath = $Env:PSModulePath + ":$HOME/projects/lesspass-powershell"
    
  3. Тогда опубликуйте

    Publish-Module `
        -Name "Lesspass" `
        -Repository "PSGallery" `
        -NuGetApiKey $Env:PSGALLERY_API_KEY `
    

По выбору

Переименовать файл для удаления Lesspass- префикс, для ясности

❯ tree
.
├── Clipboard.psm1
├── Clipboard.tests.ps1
├── Lesspass.psd1
├── Lesspass.psm1
├── Lesspass.tests.ps1
├── LICENSE
├── makefile
├── Password.psm1
├── Password.tests.ps1
├── PBKDF2_HMAC.cs
├── Profile.psm1
├── Profile.tests.ps1
├── README.md
├── tools
│   └── publish-module.ps1
├── Validator.psm1
└── Validator.tests.ps1

Вы можете публиковать из любого каталога, который захотите. PSD1 будет определять имя модуля. Если вы разрабатываете вне каталога вашего модуля, а это должно быть так, укажитеPathвместоName:

      $publish = @{
  Path = "$HOME/projects/lesspass-powershell"
  Repository = 'PSGallery'
  NuGetApiKey = $env:PSGALLERY_API_KEY
}

Publish-Module @publish
Другие вопросы по тегам