我在非标准路径下有一个模块(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) 我在 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'
)
}
显然我已经使用了文件的相对路径,尤其是。RootModule键;这是必要的,因为我无法确定共享模块时将复制到哪里。
回到 Verbose 输出,我可以看到两行显示 (1) PSD1 文件的正确路径和 (2) PSM1 文件的无效路径。我确实注意到第二个路径的用户名是小写的,这就是我Set-Location
在测试之前碰巧输入它的方式。因此,看起来第一个路径是通过将 MyModule.psd1 附加到给定Import-Module
cmdlet 的路径而采用的,第二个是 (Get-Location) 和 RootModule 路径的串联。
这似乎只发生在这个模块上。我在同一个“根”文件夹下有其他人没有表现出这种行为。