所以这个标题非常清楚,但无论如何我会问更精确。 所以问题是,是否可以从模块中导出辅助函数并使它们仅在代码中重用,但仅限于用户,因此他无法从控制台调用它们?
提前谢谢!
答案 0 :(得分:0)
当然,您只需指定要导出的内容(在psm文件中):
Export-ModuleMember -Function Verb-Noun
那只会导出这个函数并在你的psd文件中输出:
FunctionsToExport = 'Verb-Noun'
答案 1 :(得分:0)
我不认为这可能是你想要的方式。我如何处理它是在helper模块中有一个包含所有隐藏命令的PS1文件,但不将其作为辅助模块的一部分加载。然后在依赖它的模块中,只需点源PS1辅助文件,它就会导入所有脚本供它使用。
例如,在需要帮助模块的模块中:
. $PSScriptRoot\..\HelperModule\HelperModuleInternal.ps1
显然,将HelperModule和HelperModuleInternal分别替换为辅助模块的名称和隐藏的命令ps1文件。请注意,如果您将其设为psm1文件,则只会打开ISE。
我不确定但它仍然可能会尝试导出隐藏的命令,如果是这种情况,我会在处理它时阅读一个巧妙的技巧。以通常的Verb-Noun
语法调用所有已发布的命令,最后放置Export-ModuleMember -Function "*-*"
。然后,对于内部命令,请使用不符合此命名的命名,例如Verb_Noun
或VerbNoun
。非常整洁。
答案 2 :(得分:0)
我发现了两种实现所需目标的方法,但都不干净或直观。我认为问题是由$Env:PSModulePath
目录中任何模块的自动加载引起的。这是对我有用的方法,您可以选择毒药。
选项1:关闭模块自动加载
NestedModules = @('MyHelperModule')
$PSModuleAutoloadingPreference
设置为'None'
或'ModuleQualified'
。这将防止您的帮助程序模块自动加载,并因此暴露给用户。不幸的是,这也会阻止所有其他模块自动加载,这意味着您还必须在配置文件中添加Import-Module
语句,以便在每次会话开始时显式加载您想要的模块,并手动进行导入任何其他内容。根据您的工作方式,这可能会带来更多的麻烦。选项2:移动帮助程序模块
$Env:PSModulePath
列表之外的目录中,例如C:\ MyHiddenModules \ MyHelperModule。NestedModules = @('C:\MyHiddenModules\MyHelperModule\MyHelperModule.psm1')
在这两种情况下,都可以使用父清单中的FunctionsToExport数组来控制要向用户公开的辅助功能(如果有)。
$PSModuleAutoloadingPreference首选项变量的详细信息。