如何正确导入含依赖关系多类定义的PowerShell模块
PowerShell模块多依赖类的简洁导出方案
PowerShell模块中定义的类默认仅在模块内部作用域可见,这就是你直接导入模块后全局无法识别Directory类的原因。下面提供两种简洁的解决办法:
方法1:在根模块中显式导出类
修改TestModule1.psm1,在引入依赖的语句后添加导出命令,明确指定要暴露给全局的类:
using module .\Directory.psm1 Export-ModuleMember -Type Class -Name File, Directory
修改完成后,重新执行导入命令:
Import-Module .\TestModule1.psd1 -Force
此时就能直接在全局会话中调用类:
[Directory]::new("G:\Skriptkiste")
方法2:通过模块清单配置导出类
更规范的方式是直接在模块清单TestModule1.psd1中配置要导出的类,添加ClassesToExport键值对:
@{ ModuleVersion = "0.0.1" RootModule = "TestModule1.psm1" ClassesToExport = @('File', 'Directory') }
重新导入模块后,全局会话即可直接访问File和Directory类,无需额外切换作用域。
补充说明
之前通过& $m1 { [Directory]::new(...) }能正常执行,是因为这段代码是在模块的私有作用域内运行的,自然能访问模块内部的类。而显式导出类后,模块会将这些类暴露到全局会话,无需再借助作用域切换的方式调用。
内容的提问来源于stack exchange,提问作者Peter M.
相关产品推荐
相关产品推荐

