PowerShell模块,从另一个NestedModule调用NestedModule中的函数

时间:2019-03-28 12:10:37

标签: powershell

我有一个Powershell模块,并且在清单中我声明了主模块和两个嵌套模块。 该模块的结构如下:

- [dir] Pivot.DockerAdmin
    - [manifest] Pivot.DockerAdmin.psd1
    - [main module file] Pivot.DockerAdmin.psm1
    - [nested script] DockerfileScripts.ps1
    - [nested script] DockerCliScripts.ps1

有效的方法 主模块(Pivot.DockerAdmin.psm1)可以毫无问题地调用嵌套模块文件(DockerfileScripts.ps1,DockerCliScripts.ps1)中的函数。请注意,除了清单文件中的条目之外,没有包含这些文件的特定逻辑。

什么不起作用 一个嵌套模块脚本文件(DockerfileScripts.ps1)无法调用另一个嵌套模块脚本文件(DockerCliScripts.ps1)中的函数。

嵌套模块只是简单的脚本文件。因此,实际上,我使用NestedModule概念在逻辑上将其他文件中的某些功能分组。

模块已正确设置。我对此充满信心,因为我甚至在没有任何特殊处理的情况下就在构建框中运行了Pester测试。

我希望能够从另一个嵌套模块中调用嵌套模块中的函数,就像主模块可以在 any 嵌套模块中调用函数一样,但这会因而失败>无法识别的命令错误。

如果这不可能,那么在PS模块内组织脚本文件方面是否有任何建议,以便可以进行类似的脚本划分/关注点分离?

1 个答案:

答案 0 :(得分:0)

因此,如果您看一下我在此处发布的示例:

https://stackoverflow.com/a/55064995/7710456

我会对此进行扩展。

我再次查看了它,并为所有模块创建了一个模块清单,所有这些模块都需要遵循PowerShell模块的标准(在与PowerShell模块同名的文件夹中,位于存在于PSModulePath中)

Write-BazFunctions.psm1:

Function Write-Baz {
    return "Baz"
}

Write-BarFunctions.psm1:

Function Write-Bar {
    return "Bar"
}

Function Write-BarBaz {
    $bar = Write-Bar;
    $baz = Write-Baz;
    return ("{0}{1}" -f $bar, $baz)
}

Write-FooFunctions.psm1

Function Write-Foo {
    return "Foo"
}

Function Write-FooBar {
    $foo = Write-Foo
    $bar = Write-Bar
    return ("{0}{1}" -f $foo, $bar)
}

Function Write-FooBarBaz {
    $foobar = Write-FooBar
    $baz = Write-Baz
    return ("{0}{1}" -f $foobar, $baz)
}

Function Write-FooBazBar {
    $foo = Write-Foo
    $bar = Write-Bar
    $baz = Write-Baz
    return ("{0}{1}{2}" -f $foo, $bar, $baz)
}

现在-差异。在Write-BarFunctions的清单中(注意为必填项,未嵌套):

RequiredModules = @('Write-BazFunctions')

请注意与我上面链接的原始答案的另一个区别,我直接将psm1文件作为目标,而是仅按模块名称引用它们。

完成此操作后,便可以导入W​​rite-FooFunctions,并且所有功能都可用。由于Write-BarFunctions中的Write-BarBaz从Write-BazFunctions中调用Write-Baz,因此您可以看到,这将允许嵌套模块相互引用。