电源外壳模块结构



我正在尝试找出在磁盘上组织Powershell模块的最佳方法。

我认为将每个 cmdlet 放在其自己的文件中是明智的,但如果我这样做,似乎我仍然需要在 psm1 文件中点源它们,即使我已经在模块清单中列出了该文件。有什么办法可以解决必须在 psm1 文件中包含这些脚本的问题吗?如果不是,模块清单的意义何在?我觉得所有这些信息都可以包含在 psm1 文件中。

典型的做法是将函数组织到专用和公用文件夹下的单个文件中。公共是用户将调用的,私有是脚本的内部。然后,您可以使用循环来加载它们,并使用模块清单公开公共清单:

$Public = @( Get-ChildItem -Path "$PSScriptRootPublic*.ps1" ) $Private = @( Get-ChildItem -Path "$PSScriptRootPrivate*.ps1" )
@($Public + $Private) | ForEach-Object {
    Try {
        . $_.FullName
    } Catch {
        Write-Error -Message "Failed to import function $($_.FullName): $_"
    } }
Export-ModuleMember -Function $Public.BaseName Export-ModuleMember
-Variable 'LogPath'

例:

https://github.com/markwragg/Powershell-SlackBot/tree/master/SlackBot

模块清单仍然值得,它提供了其他好处,例如即使模块未加载,也允许 cmdlet 可发现,并声明依赖项(例如格式化 xml 文件或此模块依赖的其他模块(。这也是将模块发布到 Powershell 库的要求。

最新更新