“如何隐藏”;“助手”;Powershell模块中的函数

“如何隐藏”;“助手”;Powershell模块中的函数,powershell,module,Powershell,Module,我有一个模块xy,它有几个供最终用户使用的函数和几个由函数调用的内部助手函数,但最终用户不调用 Get-Command -Module xy -CommandType function 列出模块文件夹中的所有功能(例如get-foo和get-foo\u助手) 是否有一种方法可以对正在使用以下功能的最终用户隐藏get-foo\u helper功能: Get-Command -Module tcaps -CommandType function 您可以使用Export ModuleMember或

我有一个模块xy,它有几个供最终用户使用的函数和几个由函数调用的内部助手函数,但最终用户不调用

Get-Command -Module xy -CommandType function
列出模块文件夹中的所有功能(例如
get-foo
get-foo\u助手

是否有一种方法可以对正在使用以下功能的最终用户隐藏
get-foo\u helper
功能:

Get-Command -Module tcaps -CommandType function

您可以使用Export ModuleMember或创建模块清单并指定导出的命令。您可以使用New ModuleManifest创建清单文件。

我所做的一件事是对我要导出的函数使用动词-名词命名约定,但在助手函数中省略连字符


然后,
export modulemember*-*
只负责导出您想要导出的内容。

在许多情况下,声明的函数可以替换为脚本块(即匿名函数)。

只需将export modulemember添加到模块底部即可

假设您的模块中有以下功能:

New-Function0
New-Function1
New-Function2
New-HelperFunction0
Export-ModuleMember -alias nf1
将以下行添加到模块文件的底部:

Export-ModuleMember -function New-Function0
Export-ModuleMember -function New-Function1
Export-ModuleMember -function New-Function2
在此模块上运行导入模块时,它将仅导入由Export ModuleMember定义的函数

现在,假设您还希望导出New-Function1的别名。只需在模块末尾添加以下内容:

New-Function0
New-Function1
New-Function2
New-HelperFunction0
Export-ModuleMember -alias nf1

现在,当您使用导入模块时,它将加载您定义的函数,以及New-Function1的别名(nf1)。

我也使用此方法。这很容易做到,函数名会自行记录它们的可见性。我不打算否决投票,但我认为这是一个坏主意,因为它违反了PowerShell其余部分使用的专有动词-名词命名约定,即使违反的只是您自己的模块,虽然我很欣赏你的解决方案的简单实用,但我完全理解你的批评。对我来说,实用主义超过了技术(私人)违反。@ChrisMagnuson:我的一位导师有句名言:“规则是给傻瓜的,是智者的指引”。换句话说,我们不应该盲目地遵循规则或惯例,而应该将它们作为有用的指南。我认为动名词命名惯例就是一个很好的例子。我们绝对应该用它来命名其他人将发现和使用的功能,以避免打破他们的期望。但是,如果这些函数不向外部用户公开,就没有必要严格遵守命名约定,特别是如果不这样做有好处的话。(顺便说一句,不要试图暗示这里的任何人都是傻瓜)