В PowerShell 3 и более поздних версиях RequiredModules загружаются автоматически.
Это также единственный способ убедиться, что люди, использующие PowerShellGet (т. Е. галерею PowerShell), устанавливают ваши зависимости, если вы собираетесь распространять модуль.
Он все равно не сработает, если требуемые модули отсутствуют, но в остальном работает именно так, как вы этого хотите.
В PowerShell 2 нет возможности автоматически загружать RequiredModules.
В любом случае пользователи могут вручную загрузить требования, набрав Import-Module RequiredModule, YourModule
- они не получат второй экземпляр, если он уже импортирован ...
Вместо этого вы также можете указать модуль в NestedModules. Даже в PowerShell 2 они загружаются «внутри» вашего модуля, но не кажется отрицательно влиять на ресурсы, когда они уже загружены. Однако, как напомнил мне @JasonMArcher, в PowerShell 2 NestedModules выгружаются вместе с вашим модулем, если ваш модуль выгружается (через Remove-Module), и это происходит , даже если они были предварительно загружены отдельно с помощью пользователь, что может привести к созданию действительно странных отчетов об ошибках, поскольку ваши пользователи этого не ожидают.
Другой вариант, который работает во всех версиях PowerShell, - это вызвать Import-Module
в верхней части вашего модуля (в сценарии psm1 после проверки, чтобы убедиться, что модуль еще не загружен) с установленным -ErrorAction Stop
так что импорт вашего модуля не удастся, если импорт зависимого модуля не удастся.
if (!(Get-Module Dependency)) { ## Or check for the cmdlets you need
## Load it nested, and we'll automatically remove it during clean up
Import-Module Dependency -ErrorAction Stop
}
Собственно, если вы хотите проверить версии ...
if (!(Get-Module Dependency | Where { $_.Version -ge "2.5" )) {
## Load version 2.5 (or newer), or die
Import-Module Dependency -Version 2.5 -ErrorAction Stop
}
Просто помните, что это не служит документацией, поэтому, если вы распространяете модуль, ваши пользователи не будут знать о зависимостях.
person
Community
schedule
30.03.2011