如何在 PowerShell 中创建命名空间或子模块?

How do you create namespaced or sub-modules in PowerShell?

我熟悉使用以下文件夹结构编写自定义 PowerShell 模块:

Modules
|  +-- WebUtils
|  |  +-- WebUtils.psm1
|  +-- BuildUtils
|  |  +-- BuildUtils.psm1

您可以通过 using module WebUtils.

之类的操作导入 webutils 模块

我有一个正在进行的大型项目,它重复使用了很多相同的功能。现在我在一个模块中有大约一百个松散相关的函数。问题是我通常只需要使用其中的 10 - 20 个,具体取决于项目。我想以类似于这样的方式拆分模块:

Modules
|  +-- Utils
|  |  +-- Web
|  |  |  +-- Web.psm1
|  |  +-- Build
|  |  |  +-- Build.psm1
|  |  +-- Utils.psm1

我可以称呼它们为 using module Utils.Web 或类似的东西。

我该怎么做?我还没有找到任何好的例子。这是组织事物的好方法吗?

大模块通常会拆分成单独的模块,这些模块执行一组相关的功能。这个 Azure 的一个很好的例子,或者 - 如下 - VMware PowerCLI

如果您 Import-Module VMware.PowerCLI 它将导入所有模块。但是你可以导入一个单独的模块,它只会导入那些 functions/commands 和任何模块依赖项,通过它们在 .psd1 中命名,例如,如果你只想要 VMware.VimAutomation.Core 它也拉入 VMware.VimAutomation.Cis.Core

所以不,不是一个模块的子文件夹,而是可以加载的其他相关模块。