2016-10-31 13 views
6

У меня есть тип перечисления, определенный в модуле. Как я могу экспортировать его для доступа извне, как только модуль был загружен?Export Powershell 5 enum декларация от модуля

enum fruits { 
apple 
pie 
} 

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

Моя продвинутая функция принимает перечисление вместо ValidateSet, который работает, если перечисление доступен, но терпит неудачу, если это не так.

Update: Разделяя его в PS1 и дот-поиске его (ScriptsToProcess) работает, но я хотел бы, что есть способ очистки.

+0

Престол [как экспортировать класс в powershell v5 module] (// stackoverflow.com/a/3 8701492) - добавьте 'использование модуля moduleName' после импорта – wOxxOm

ответ

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 

 Смежные вопросы

  • Нет связанных вопросов^_^