PowerShell 6+模块中如何导出枚举器?
PowerShell模块中枚举定义的相关问题解答
问题背景
在PowerShell模块中,目前将枚举定义放在单独的.ps1文件中,通过点源方式在模块文件(.psm1)中引入,示例如下:
Enumerators.ps1
enum Fruits { apple pear orange banana }
MyModule.psm1
. Fruits.ps1
已知类定义可以迁移到Types.ps1xml文件中,因此想了解是否有类似方法用于定义枚举?同时关注PowerShell 6/7相较于PowerShell 5是否有变化。
解答
核心结论
PowerShell 6/7 依然不支持通过Types.ps1xml文件定义枚举类型。Types.ps1xml的设计初衷是扩展现有.NET类型的成员(如添加自定义属性、方法)或定义类型的显示视图,从PowerShell 5到7,它都不具备定义枚举的能力,官方文档也未提及相关的"enumerator"成员标签。可行的替代方案
- 保持点源引入方式:这是最直接且兼容所有PowerShell版本的做法,将枚举定义放在单独的
.ps1文件中,在模块的.psm1文件中点源加载即可。 - 通过模块清单自动加载:可以在模块的
.psd1清单文件中,将枚举所在的.ps1文件添加到ScriptsToProcess字段中,这样模块加载时会自动执行该脚本,枚举类型会被自动定义,无需在.psm1中手动点源。
- 版本差异说明
PowerShell 6/7 在枚举定义的方式上与PowerShell 5没有变化,依然只能通过脚本中的enum关键字定义,或通过Add-Type编译C#代码来创建枚举类型。
内容的提问来源于stack exchange,提问作者jeremywat
相关产品推荐
相关产品推荐

