我在非标准路径下有一个模块(MyModule),即不在$env:PSModulePath -split ";"
中列出的通常位置下。但是,我已将“生产”路径添加到该环境变量MyModule,同时继续处理“开发”副本。导入模块详细输出意味着模块被加载两次
虽然试图调试的东西,我装使用下面的命令模块(带$VerbosePreference = "Continue"
),并立即看到详细输出的两个看似矛盾的台词:
[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'.
我想明白为什么导入模块出现要加载模块两次,尤其是当第二个路径不正确时。
更详细地:
用于模块的文件夹结构是:
MyModule\MyModule.psd1
MyModule\MyModule.Test-Module.xml
MyModule\MyModule1\MyModule.psm1
MyModule\MyModule2\MyModule.psm1
注(1)I在一个MyModule1子文件夹下保持该模块的旧 “版本1”并将我更新后的“版本2”文件放入MyModule2子文件夹中,以及(2)自定义模块测试脚本使用.xml文件列出测试用例。我很确定后者可以被忽略。
我的模块清单(的.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'
)
}
的文件显然我已经使用相对路径,ESP。 RootModule key;这是必要的,因为我无法确定模块在分享时将被复制到何处。回到Verbose输出,我可以看到两行显示(1)PSD1文件的正确路径和(2)PSM1文件的无效路径。我确实注意到第二条路径的用户名是小写的,这正是我在测试之前碰巧输入的名称。因此,看起来第一个路径是通过将MyModule.psd1附加到给定的Import-Module
cmdlet的路径来实现的,第二个路径是(Get-Location)和RootModule路径的串联。
这似乎只发生在这个模块。我没有出现这种行为的同一个“根”文件夹下的其他人。