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),但我希望有一种更清洁的方式.
在 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)
您可以在使用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)
| 归档时间: |
|
| 查看次数: |
2091 次 |
| 最近记录: |