У меня есть модуль (MyModule) по нестандартному пути, то есть не в обычных местах, перечисленных в $env:PSModulePath -split ";"
. Однако я добавил «производственный» путь к MyModule к этой переменной среды, пока продолжаю работать над «разрабатываемой» копией.
Пытаясь что-то отладить, я загрузил модуль (с $VerbosePreference = "Continue"
) с помощью следующей команды и сразу увидел две, казалось бы, противоречивые строки вывода Verbose:
[D:\Dev\UserA\]> Import-Module D:\Dev\UserA\libs\PowerShell\MyModule
VERBOSE: Loading module from path 'D:\Dev\UserA\libs\PowerShell\MyModule\MyModule.psd1'.
VERBOSE: Loading module from path 'D:\Dev\usera\MyModule2\MyModule.psm1'.
Я хотел бы понять, почему кажется, что Import-Module загружает модуль дважды, тем более что второй путь неверен.
ПОДРОБНЕЕ:
Структура папок для модуля:
MyModule\MyModule.psd1
MyModule\MyModule.Test-Module.xml
MyModule\MyModule1\MyModule.psm1
MyModule\MyModule2\MyModule.psm1
Примечание (1) я сохранил старую «версию 1» этого модуля в подпапке MyModule1 и поместил обновленный файл «версии 2» в подпапку MyModule2 и (2) что файл .xml используется пользовательским module-testing скрипт для вывода списка тестовых случаев. Я почти уверен, что последнее можно игнорировать.
Мой файл манифеста модуля (.psd1) содержит следующее, все остальные строки являются пробелами или комментариями:
@{
RootModule = '.\MyModule2\MyModule.psm1'
ModuleVersion = '2.0.0.0'
GUID = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
Author = 'Old Developer (v1.x) & New Developer (v2.x)'
CompanyName = 'MyCompany'
Copyright = '(c) 2013-2015 MyCompany. All rights reserved.'
Description = 'Really useful functions'
FileList = @(
'.\MyModule.psd1'
'.\MyModule.Test-Module.xml'
'.\MyModule1\MyModule.psm1'
'.\MyModule2\MyModule.psm1'
'.\MyModule2\Examples\Archive-FilesWithCompression.ps1'
)
}
Ясно, что я использовал относительные пути к файлам, особенно. ключ RootModule; это необходимо, так как я не могу быть уверен, куда будет скопирован модуль, когда я расскажу о нем.
Возвращаясь к подробному выводу, я вижу, что две строки показывают (1) правильный путь к файлу PSD1 и (2) недопустимый путь к файлу PSM1. Я заметил, что второй путь имеет имя пользователя в нижнем регистре, именно так я набрал его, когда Set-Location
перед тестированием. Итак, похоже, что первый путь был выбран путем добавления MyModule.psd1 к пути, заданному командлету Import-Module
, а второй - это конкатенация (Get-Location) и пути RootModule.
Это только кажется, что происходит с этим модулем. У меня есть другие в той же «корневой» папке, которые не демонстрируют такого поведения.