Powershell模块结构

时间:2017-03-26 18:13:37

标签: powershell

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

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

1 个答案:

答案 0 :(得分:2)

典型的做法是将您的功能组织到私人和公共文件夹下的各个文件中。 Public是您的用户将调用的那些,private是脚本内部的。然后你可以使用循环来加载它们,以及使用模块清单来公开公共模块:

$Public = @( Get-ChildItem -Path "$PSScriptRoot\Public\*.ps1" ) $Private = @( Get-ChildItem -Path "$PSScriptRoot\Private\*.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

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