如何隐藏Powershell模块中的"助手"功能

icn*_*vad 37 powershell module

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

Get-Command -Module xy -CommandType function
Run Code Online (Sandbox Code Playgroud)

列出我在模块文件夹中的所有功能(例如get-fooget-foo_helper)

有没有办法隐藏get-foo_helper正在使用的最终用户的功能:

Get-Command -Module tcaps -CommandType function
Run Code Online (Sandbox Code Playgroud)

Mik*_*ard 40

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

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

  • 我不打算投票,但我认为这是一个坏主意,因为它违反了PowerShell其余部分使用的正确的动词 - 名词命名约定,即使违规只在你自己的模块中,尽管我很欣赏实用的简单性你的解决方案. (5认同)
  • @ChrisMagnuson:我的一位导师有一句好话:"规则是为了傻瓜和智者的指导".换句话说,我们不应盲目遵守规则或惯例,而应将其作为有用的指南.我认为动词 - 名词命名约定就是一个很好的例子.我们绝对应该用它来命名别人会发现和使用的功能,以避免打破他们的期望.但是,如果函数不暴露给外部用户,则不需要严格遵守命名约定,特别是如果没有这样做会带来好处.(顺便说一下,不要试图暗示任何人在这里是个傻瓜) (4认同)
  • 我完全理解你的批评.对我来说,实用主义胜过技术(私人)违规. (3认同)
  • @ChrisMagnuson,您始终可以使用不同的命名约定来满足 PowerShell 最佳实践。例如,让所有公共函数都与模块前缀匹配。假设我有“MyCoolModule”并且导出的函数匹配:`*-MCM*` (3认同)

Joe*_*oeG 35

只需将Export-ModuleMember添加到模块的底部即可.

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

New-Function0
New-Function1
New-Function2
New-HelperFunction0
Run Code Online (Sandbox Code Playgroud)

将这些行添加到模块文件的底部:

Export-ModuleMember -function New-Function0
Export-ModuleMember -function New-Function1
Export-ModuleMember -function New-Function2
Run Code Online (Sandbox Code Playgroud)

在此模块上运行Import-Module时,它只会导入Export-ModuleMember定义的函数.

现在假设您还想为New-Function1导出别名.只需将其添加到模块的末尾:

Export-ModuleMember -alias nf1
Run Code Online (Sandbox Code Playgroud)

现在,当您使用Import-Module时,它将加载您定义的函数,以及New-Function1的别名(nf1).


mjo*_*nor 5

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