Трябва ли 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.

Кръстовище

Що се отнася до Windows PowerShell, вие сте в директорията Foo, която съответства на името на файла Foo.psm1. Трябва да игнорира останалите файлове в тази папка.

Сега можете да стартирате Get-Module -ListAvailable и трябва да видите списък с модулите в директорията на вашите потребителски модули.

Get-Module -ListAvailable

person Trevor Sullivan    schedule 15.01.2014