首页 > 解决方案 > 在模块内定义私有函数的约定和原生支持

问题描述

powershell 模块使得拥有私有“方法”成为可能,但我找不到任何约定或支持这样定义它们。对于较大的脚本,这不仅仅是表面上的代码美化,能够通过名称判断方法是否是本地的变得非常重要。

这种工作,但每次我导入它没有使用正确命名的动词时,powershell都会抱怨。是否有支持定义本地函数/方法的前缀?

function _Get-Something {...}
function Get-SomethingElse { _Get-Something -arg sdfsdf .....}

Export-ModuleMember -Function Get-SomethingElse

标签: powershell

解决方案


使用您的示例,我没有收到警告消息(PowerShell 5.1),因为您没有导出 function _Get-Something

如果我确实将其导出(Export-ModuleMember -Function Get-SomethingElse, _Get-Something),则会发生警告。

我不知道这有什么约定,但我通常做的是在模块中命名这样一个辅助函数,带破折号(_Get-Something--> _GetSomething),并为我想要导出的函数使用带有批准动词的正确名称。然后导出懒惰的方式:

Export-ModuleMember -Function *-*

也可以在使用它的导出函数中“隐藏”辅助函数,例如

function Get-SomethingElse { 
    # helper function inside
    function _Get-Something { Write-Host "Hi from $($MyInvocation.MyCommand)" }

    _Get-Something -arg 'sdfsdf .....'
}

Export-ModuleMember -Function Get-SomethingElse

这也没有在我的机器上显示警告。

-DisableNameChecking最后,您可以通过将开关添加到命令来消除警告:

Import-Module 'D:\test.psm1' -DisableNameChecking

希望这可以帮助


推荐阅读