Я создал модуль 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
все время, прежде чем повторно импортировать его.
Проклятие! Ты сделал это. Я указал это, но я следил за тем, чтобы по умолчанию он был закомментирован :-(. Пожалуйста, ответьте на мой вопрос, чтобы я мог его подтвердить.
FunctionsToExport
похож на решето — он просто позволяет вложенным модулям экспортировать свои функции через манифест, но их все равно нужно где-то определить.
Убедитесь, что модуль скрипта (файл .psm1
) указан как RootModule
(или хотя бы NestedModule
) в манифесте:
@{
# Script module or binary module file associated with this manifest.
RootModule = 'AzureDD.psm1'
# ...
}
Вы указали существующий
psm1
какRootModule
в манифесте?FunctionsToExport
похож на решето - он просто позволяет вложенным модулям экспортировать свои функции, но их все равно нужно где-то определить