Powershell模块结构

Powershell模块结构,powershell,Powershell,我正在尝试找出在磁盘上组织Powershell模块的最佳方法 我认为将每个cmdlet放在自己的文件中是明智的,但如果我这样做,似乎仍然需要在psm1文件中点源代码,即使我已在模块清单中列出了该文件。有没有办法在psm1文件中包含这些脚本?如果没有,模块清单的意义是什么?我觉得所有这些信息都可以包含在psm1文件中。典型的做法是将您的功能组织到私人和公共文件夹下的各个文件中。Public是用户将调用的,private是脚本内部的。然后,您可以使用一个循环来加载它们,也可以使用模块清单来公开公共清

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


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

典型的做法是将您的功能组织到私人和公共文件夹下的各个文件中。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'
例如:


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

您还可以创建一个大模块并选择要导出的函数。有关更多信息,请参阅。@user4317867,这正是我试图避免的。我想大多数人都会同意,代表单个函数的文件比将所有内容保存在一个文件中要好。“它更容易维护。”马克,我想我也在做类似的事情。我通过命名名称中不带“-”的私有方法来实现这一点,然后只调用Export-ModuleMember-Function-。这将产生相同的结果,是吗?是的,但是我认为您仍然需要在清单的functionstoexport字段中显式地命名公共的,以自动发现它们(而不显式地加载模块)。