我在模块中定义了枚举类型。如何在模块加载后将其导出以便从外部访问?
enum fruits {
apple
pie
}
function new-fruit {
Param(
[fruits]$myfruit
)
write-host $myfruit
}
我的高级函数使用枚举而不是ValidateSet
,如果枚举可用,它会起作用,但如果不是,则会失败。
更新 将它分成ps1并将其点源(ScriptsToProcess)可以工作,但是我希望它更清洁。
答案 0 :(得分:3)
使用using module ...
命令加载模块后,您可以访问枚举。
例如:
MyModule.psm1
enum MyPriority {
Low = 0
Medium = 1
high = 2
}
function Set-Priority {
param(
[Parameter(HelpMessage = 'Priority')] [MyPriority] $priority
)
Write-Host $Priority
}
Export-ModuleMember -function Set-Priority
请:
New-ModuleManifest MyModule.psd1 -RootModule 'MyModule.psm1' -FunctionsToExport '*'
然后在Powershell ......
Import-Module .\MyModule\MyModule.psd1
PS C:\Scripts\MyModule> [MyPriority] $p = [MyPriority ]::High
Unable to find type [MyPriority].
At line:1 char:1
+ [MyPriority] $p = [MyPriority ]::High
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (MyPriority:TypeName) [], RuntimeException
+ FullyQualifiedErrorId : TypeNotFound
PS C:\Scripts\MyModule> using module .\MyModule.psd1
PS C:\Scripts\MyModule> [MyPriority] $p = [MyPriority ]::High
PS C:\Scripts\MyModule> $p
high
答案 1 :(得分:2)
遇到相同的问题,尝试使用/导出5.0.x上的嵌套模块(.psm1)中的枚举。
设法通过使用Add-Type
使其起作用:
Add-Type @'
public enum fruits {
apple,
pie
}
'@
然后您应该可以使用
[fruits]::apple
答案 2 :(得分:1)
在获取模块中的类,枚举或任何.Net类型并要导出它们时,必须在脚本中要导入的位置使用using
关键字,否则只能使用{{1 }}将被导入。
答案 3 :(得分:-1)
这似乎是PowerShell 5.0.x版本中的某个问题。
我在5.0.10105.0上遇到了问题
但是,这在5.1.x版本中运行良好。