类 在导入的模块中作为依赖加载,不会导入到脚本中
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 的方式的影响。我们有两种方法:
导入模块
是允许将模块内容加载到会话中的命令。
...
它必须在您要调用的位于该特定模块中的函数之前调用。但不是 necessarly 在你的 beginning/top
脚本。
使用模块
...
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
我有一些 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 的方式的影响。我们有两种方法:
导入模块
是允许将模块内容加载到会话中的命令。
... 它必须在您要调用的位于该特定模块中的函数之前调用。但不是 necessarly 在你的 beginning/top 脚本。
使用模块
...
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