从模块导出Powershell 5枚举声明

时间:2016-10-31 18:14:56

标签: powershell enums powershell-v5.0 cmdlet powershell-module

我在模块中定义了枚举类型。如何在模块加载后将其导出以便从外部访问?

enum fruits {
 apple
 pie
}

function new-fruit {
    Param(
        [fruits]$myfruit
    )
    write-host $myfruit
}

我的高级函数使用枚举而不是ValidateSet,如果枚举可用,它会起作用,但如果不是,则会失败。

更新 将它分成ps1并将其点源(ScriptsToProcess)可以工作,但是我希望它更清洁。

4 个答案:

答案 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版本中运行良好。