如何在 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

ModuledirList

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

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