Манифест пользовательского модуля PowerShell не предоставляет объявленные функции

Я создал модуль PowerShell. Модуль предоставляет 3 функции. Когда я устанавливаю его без манифеста напрямую, вывод будет:

> Import-Module AzureDD
> Get-Module | Where { $_.Name -eq 'AzureDD' }

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Script     0.0        AzureDD                             {New-AzureDDAppPermission, New-AzureDDAppRegistration, Sync-AzureDDStorageContainer}

Это работает, потому что моя последняя строка в файле psm:

Export-ModuleMember -Function New-AzureDDAppRegistration, New-AzureDDAppPermission, Sync-AzureDDStorageContainer

Теперь я хотел добавить управление версиями и дополнительные метаданные и продолжил

> New-ModuleManifest -Path .\AzureDD.psd1 -ModuleVersion "2.0"

который создает новый файл AzuerDD.psd1. Здесь я редактировал много материала. Помимо других изменений, я также определил экспортируемые функции следующим образом:

FunctionsToExport = @('New-AzureDDAppPermission', 'New-AzureDDAppRegistration', 'Sync-AzStorageContainer')

Я могу успешно проверить это:

> Test-ModuleManifest .\AzureDD.psd1

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   2.0        AzureDD                             {New-AzureDDAppPermission, New-AzureDDAppRegistration, Sync-AzStorageContainer}

Но когда я на самом деле импортирую это, он не будет отображать экспортированную команду:

> Import-Module .\AzureDD.psd1
> Get-Module | Where { $_.Name -eq 'AzureDD' }

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   2.0        AzureDD

Посмотрите, как он изменился на Manifest по сравнению с моим самым первым фрагментом! Я гарантировал, что делал Remove-Module AzureDD -Force все время, прежде чем повторно импортировать его.

Вы указали существующий psm1 как RootModule в манифесте? FunctionsToExport похож на решето - он просто позволяет вложенным модулям экспортировать свои функции, но их все равно нужно где-то определить

Mathias R. Jessen 10.12.2020 17:01

Проклятие! Ты сделал это. Я указал это, но я следил за тем, чтобы по умолчанию он был закомментирован :-(. Пожалуйста, ответьте на мой вопрос, чтобы я мог его подтвердить.

Alexander Schmidt 10.12.2020 17:03
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
360
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

FunctionsToExport похож на решето — он просто позволяет вложенным модулям экспортировать свои функции через манифест, но их все равно нужно где-то определить.

Убедитесь, что модуль скрипта (файл .psm1) указан как RootModule (или хотя бы NestedModule) в манифесте:

@{
  # Script module or binary module file associated with this manifest.
  RootModule = 'AzureDD.psm1'

  # ...
}

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