从模块导出Powershell 5枚举声明

Joe*_*oel 8 powershell enums cmdlet powershell-module powershell-5.0

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

enum fruits {
 apple
 pie
}

function new-fruit {
    Param(
        [fruits]$myfruit
    )
    write-host $myfruit
}
Run Code Online (Sandbox Code Playgroud)

我的高级函数使用枚举而不是ValidateSet枚举可用的枚举,但如果不可用则失败.

更新: 将它分成ps1并点源(ScriptsToProcess),但我希望有一种更清洁的方式.

Wil*_*ill 9

在 5.0.x 上尝试使用/导出嵌套模块 (.psm1) 中的枚举时遇到了同样的问题。

设法通过使用Add-Type来使其工作:

Add-Type @'
public enum fruits {
    apple,
    pie
}
'@
Run Code Online (Sandbox Code Playgroud)

然后你应该可以使用

[fruits]::apple
Run Code Online (Sandbox Code Playgroud)


Chr*_*wis 7

您可以在使用using module ...命令加载模块后访问枚举。

例如:

我的模块.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
Run Code Online (Sandbox Code Playgroud)

制作:

New-ModuleManifest MyModule.psd1 -RootModule 'MyModule.psm1' -FunctionsToExport '*' 
Run Code Online (Sandbox Code Playgroud)

然后在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
Run Code Online (Sandbox Code Playgroud)