Должны ли модули Powershell размещаться в отдельных папках?

Использование PowerShell 2.0

Согласно тому, что я читал в Интернете, каждый созданный пользователем модуль powershell должен находиться в своем собственном каталоге. Например, если я создаю модуль с именем MyModule.psm1, он должен находиться в папке с именем MyModule и в любом каталоге, указанном в $env:PSModulePath.

Если у меня много модулей для проекта, мне кажется глупым создавать для каждого отдельную папку. Это действительно необходимо? Почему? Какой-нибудь элегантный способ обойти это?


person Mark Allison    schedule 15.01.2014    source источник


Ответы (3)


Модули PowerShell могут состоять из нескольких файлов, например, для предоставления многоязычная справка или разделение функциональности на несколько файлов. Так что да, это необходимо.

person Ansgar Wiechers    schedule 15.01.2014

Если вы хотите просто иметь файл .psm1, вы можете импортировать его, указав путь к самому файлу, а не просто имя модуля.

Например:

import-module c:\mymodules\folder\themodule.psm1

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

person Mike Shepard    schedule 15.01.2014

Это не идеально, но вы можете создавать соединения (MSDN), используя Sysinternals junction.exe. Это позволит вам хранить все фактические данные в одной папке, но ссылаться на них по разным путям.

[MSDN] Жесткие ссылки и Соединения

Предположим, что у вас есть три (3) автономных файла модуля .psm1 в папке с именем Modules в вашем каталоге $env:UserProfile\Documents\WindowsPowerShell\Modules.

Папка модуля

Вы можете использовать несколько команд junction.exe для создания соединений (ссылок), которые указывают на «настоящую» папку Modules в файловой системе.

$ModulePath = '{0}\Modules' -f (Split-Path -Path $Profile.CurrentUserCurrentHost -Parent);
junction.exe $ModulePath\Foo $ModulePath\Modules;
junction.exe $ModulePath\Bar $ModulePath\Modules;
junction.exe $ModulePath\Trevor $ModulePath\Modules;

Соединения

Вот как это выглядит, когда вы переходите на один из перекрестков, например, Foo.

Junction

Что касается Windows PowerShell, вы находитесь в каталоге Foo, который соответствует имени файла Foo.psm1. Он должен игнорировать остальные файлы в этой папке.

Теперь вы можете запустить Get-Module -ListAvailable, и вы должны увидеть список модулей в вашем пользовательском каталоге модулей.

Get-Module -ListAvailable

person Trevor Sullivan    schedule 15.01.2014