类 在导入的模块中作为依赖加载,不会导入到脚本中

Classes loaded as dependency in imported module are not imported into script

我有一些 PowerShell 模块和脚本如下所示:

MyClassModule.psm1

class MyClass {
  #...
}

MyUtilityModule.psm1

using module MyClassModule

# Some code here

MyScript.ps1

using module MyUtilityModule

[MyClass]::new()

我的问题是:

如果 class 作为 MyUtilityModule 中的依赖项导入,为什么此脚本会失败?

导入是否总是只在导入它们的直接脚本本地进行?

有什么方法可以使它们成为 using 语句的全局变量吗?

如果有任何不同,我需要编写至少向后兼容 PowerShell 5.1 版的软件

这都是关于范围的。用户体验直接受到加载 class 的方式的影响。我们有两种方法:

  1. 导入模块

    是允许将模块内容加载到会话中的命令。

    ... 它必须在您要调用的位于该特定模块中的函数之前调用。但不是 necessarly 在你的 beginning/top 脚本。

  2. 使用模块

    ...

    using 语句必须位于脚本的最顶部。它还必须是脚本的第一条语句(注释除外)。这个 使“有条件地”加载模块成为不可能。

命令类型,可以在脚本的任何地方调用,内部函数,public函数,枚举,类

导入模块,是,否,是,否,否

使用模块,不,不,是,是,是

有关详细信息,请参阅这些参考资料

如何使用 classes 编写 Powershell 模块 https://stephanevg.github.io/powershell/class/module/DATA-How-To-Write-powershell-Modules-with-classes

您所说的 PowerShell 中的模块作用域是什么? https://mikefrobbins.com/2017/06/08/what-is-this-module-scope-in-powershell-that-you-speak-of