我正在编写一个模块,并且有一些我不想公开的辅助函数,但我确实希望在内部可以使用模块函数。我的目录结构如下:
root\
..Private
....Invoke-PrivateTest.ps1
....private.psd1
....private.psm1
..Public
....Get-Something.ps1
....Public.psd1
....Public.psm1
..test.psd1
我已经在 github 上设置了一个存储库 https://github.com/jpbruckler/test其中包含所有模块文件。
我期望的行为是 Get-Something 是一个公共(public)函数。运行 Get-Command -Module Test
时应该列出它。相反,Invoke-PrivateTest
不应出现在该命令的输出中。
当调用Get-Something
时,它应该输出文本Invoke-PrivateTest called
。相反,我收到一条错误,指出命令 Invoke-PrivateTest 不存在。
我在 test.psd1
中明确指出,仅导出 Get-Something
函数。
私有(private)模块和公共(public)模块都是通过 test.psd1
中的 NestedModules
属性调用的。任何帮助或指示将不胜感激。
最佳答案
除非您有其他原因将代码放入单独的(子)模块中,否则我会将其保存在一个文件夹中并控制通过函数名称导出的内容。对公共(public)函数的名称使用“官方”符号 ( <Verb>-<Noun>
),并省略私有(private)函数名称中的连字符 ( <Verb><Noun>
)。这样您就可以在全局 .psd1 中导出公共(public)函数,如下所示:
FunctionsToExport = '*-*'
关于powershell - PowerShell 模块中的内部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34978785/