Powershell模块嵌套

时间:2018-01-23 14:34:23

标签: powershell nested

我想嵌套多个模块/脚本,我想将实际文件保存在多个目录中:

BuildTests[dir]  
|BuildTests.psd1  
|GenericTests[dir]  
||GenericTests.psd1  
||GenericTest1.ps1  
||GenericTest2.ps1  
|SpecificTests[dir]  
||SpecificTests.psd1  
||SpecificTest1.ps1  
||SpecificTest2.ps1  

我想为每个.ps1文件保留1个函数 我尝试过以下方法:

BuildTests.psd1中的

定义NestedModules = @('.\GenericTests\GenericTests.psd1','.\SpecificTests\SpecificTests.psd1')

GenericTests.psd1中的

定义ScriptsToProcess = @('GenericTest1.ps1','GenericTest2.ps1')
相应地配置SpecificTests.psd1

基本上这可行,但是当检查get-module时,我看到.ps1文件中的所有函数都被导入了两次,使用-verbose参数进一步检查import-module,我可以看到有一次它是“加载模块... test1.ps1“和下一行是”Dot-Sourcing the script file .... test1.ps1“。

我尝试过.psd1中的不同变体(从.ps1更改为.psm1并将它们包含在嵌套模块中),但我似乎总是导入重复项或根本没有导入任何函数。

1 个答案:

答案 0 :(得分:0)

看起来它工作正常,令我困惑的是多次输出/导入相同功能的详细输出:

PS D:\DevRepository\ParentModule> Import-Module .\ParentModule.psd1 -Verbose
VERBOSE: Loading module from path 'D:\DevRepository\ParentModule\ParentModule.psd1'.
VERBOSE: Loading module from path 'D:\DevRepository\ParentModule\Modules1\Modules1.psd1'.
VERBOSE: Loading module from path 'D:\DevRepository\ParentModule\Modules1\TestCase1.ps1'.
VERBOSE: Dot-sourcing the script file 'D:\DevRepository\ParentModule\Modules1\TestCase1.ps1'.
VERBOSE: Exporting function 'test-case1'.
VERBOSE: Importing function 'test-case1'.
VERBOSE: Exporting function 'test-case1'.
VERBOSE: Importing function 'test-case1'.

然后检查模块ExportedFunctions属性:

PS D:\DevRepository\ParentModule> Get-Module ParentModule | select ExportedFunctions

ExportedFunctions
-----------------
{[test-case1, test-case1]}

实际上列出了键/值对:

PS D:\DevRepository\ParentModule> (Get-Module ParentModule).ExportedFunctions

Key        Value
---        -----
test-case1 test-case1